暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostGIS实现叠加分析之-Spatial Join (1)

PostGIS专栏 2020-04-12
2077

摘要:Spatial Join打算分两篇来讲,第一篇白话一些简单理论,第二篇主要结合官方文档介绍实践应用,此为理论篇。

理论篇



Spatial Join,即空间连接,其依据是空间关系。由于空间关系的复杂性,空间连接分析算比较复杂的一个,这涉及到空间关系的相关概念、模型等,实际应用中我们用空间关系函数对空间关系进行初步判断,注意大部分并不生产新数据,结合关系数据库其他操作可以配合做很多空间数据的分析。

空间关系也是空间数据区别于非空间数据一个非常重要的特点。比如我们最为熟知的关系数据库(RDBMS),他这里的“关系”的核心是基于二维表的,即笛卡尔积的集合理论,相对抽象的很多,记得以前学数据库概论的时候,老师堆一堆数学抽象概念定义之类的。

我们空间数据也有“关系”,即空间关系,这是可以看得见摸得着的,比如我们描述“这条公路穿过五个省”,就隐含了“线穿过面的空间关系”的空间拓扑关系,再比如"武汉在广州的北边",这句话也隐含了一个空间方向的关系,这些都很直观形象的,这也是我们学习空间数据相对不枯燥的一点,总的来说空间关系包括度量关系、方向关系、和拓扑关系。一般默认指空间拓扑关系。

虽说空间关系看起来直观形象,但是由于空间问题固有的复杂性和不确定性,“关系”本身很难去定量描述,为了定性的去描述空间关系,大牛们就整出一套套的理论去定义它,这样我们就能进行数字化、量化,进而进行计算机的表达,再去做运算。

其中最为广泛的是九交模型理论(DE-9IM),该模型把空间几何要素划分为内,外,边界三个部分,通过对几何要素这三个部分的关系判断,来定义空间要素的空间关系,有兴趣的同学,想深挖的可以查相关资料。先定义E,I,B:

看下图来个直观认识:

再来一张九交模型的经典图,文氏图的可在网上找到一堆,这里不放了:

来个具体的实例就是这样子的:

有了以上定义,就可以定义空间拓扑关系,比如Contains包含关系,描述为:一个几何图形的内部完全包含了另一个几何图形的内部和边界,逻辑上是非常严谨的,更多例子见下图:

Arcgis spatial join工具提供了18个空间关系,PostGIS提供了17个空间拓扑关系函数,这么多的空间拓扑关系,看起来很凌乱又记不住,其实根据实际的使用情况,空间拓扑关系又可分三大类

  • 包含:contains,within 等

  • 相交:intersect,3DIntersects ,Crosses 等

  • 邻近:Touches ,WITHIN_A_DISTANCE 等


大致梳理的分类对应关系如下:
注意:这里的空间关系模型是具有通用性的,任何实现了空间数据支持的空间数据库都会有相应空间关系判断函数的实现,可能名字不同,但是做的事都是一样的,比如mysql空间扩展,oracle spatial扩展,h2空间扩展,spatialite等等,包括阿里实现的所谓时空数据库,他们都有相应实现,都能找到函数原型,同样的不仅空间关系判断函数,包括其他空间分析以及很多OGC标准的实现,只是各家实现程度,效率,性能,应用场景各不相同。

首先我们看Arcgis中如何实现Spatial Join,工具箱里查找该工具。一个Target 图层参数,一个Join图层参数,然后是关系判断,这里Target认为在操作符左边,称作输入图层,Join在操作符右边,称作操作图层(可以参考这一篇文章GIS:谈谈叠加分析),这里的操作符就是空间关系的判断,可以列个公式:

TargetLayer (Spatial Relationships ) JoinLayer
复制

比如A contins B,A 是Target Layer,B是Join Layer,操作符是Contains,如果A中的某要素Contains B中的某要素,这条记录返回为真,然后取相应字段。可选的空间关系列出了18个,具体可以在右边查看对应的解释,英文的容易理解

PostGIS提供的空间拓扑关系函数,可以实现Arcgis中的Spatial Join操作,具体的要能够灵活使用以满足需求

注意一点这些函数只是空间关系的判断,也就是说我们可以放在where子句中作为条件的,他并不生产空间要素,用户可以随便怎么组合应用在自己的项目中,基于某种空间关系的判断去实现自己需求,最简单的例子,想要计算所有穿过河南省的高速公路的长度,那首先要坐的就是判断哪些高速公路穿过了河南省,这就是线面的空间关系的判断。使用时注意参数类型,一般为geometry或者geography。

相对比的话,Postgis函数的第一个参数相当于TargetLayer,第二个参数相当于JoinLayer,切勿生搬硬套,一定要掌握PostGIS各种空间关系函数的含义,就可以摈弃Arcgis的各种难受限制,在具体场景中灵活使用。

有些表达可能欠妥或不准确,有不明白的地方欢迎交流。下一篇直接介绍常用函数的使用以及注意点。



文章转载自PostGIS专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论