【PostGIS入门】三、空间关系与空间连接

663 阅读2分钟

1、几何图形的维度

Point的维度是0,Line维度是1,Polygon的维度是2

注:在PostGIS中是这样定义的,不知道是否是一个业界的规范

2、空间关系

2.1相等判断

ST_Equals:
如果相同类型的两个几何具有相同的 x,y 坐标值,则 ST_Equals 返回 TRUE。

2.2相交判断

包括:ST_Intersects, ST_Disjoint, ST_Crosses and ST_Overlaps

ST_Intersects:

  • 相交判断,如果两个几何图形的边界或内部相交,ST_Intersects返回true。

image.png

ST_Disjoint:

  • 与相交相反,通常直接使用not ST_intersects,因为相交测试可以使用空间索引。

image.png

ST_Crosses

几何图形交叉判断,对于multipoint/polygon, multipoint/linestring, linestring/linestring, linestring/polygon, and linestring/multipolygon判断,如果相交产生的几何图形的维度小于比参与相交判断的两个源几何图形的最大维度小,并且相交结果位于两个源几何图形的内部,则ST_Crosses返回true。

注明:Point的维度是0,Line维度是1,Polygon的维度是2 注意这里内部的定义,对于线段就是在线上**,对于面是指在内部不在边界。**

image.png

ST_Overlaps

重叠判断,比较两个相同维度的几何图形如果它们相交结果也是相同维度并且与两个源几何图形不一样(也就是ST_Equals的结果为false)。
image.png

2.3接触判断

ST_Touches:如果两个几何图形在它们的边界上接触但在内部并不相交。
image.png

2.4包含判断

**ST_Within**/ **ST_Contains**用于判断一个几何图形是否在另一个的内部。
**ST_Within****ST_Contains**的区别是参数的顺序不同,ST_Within(geom A, geom B)判断几何图形A是否在B的内部,ST_Contains则相反。
image.png

2.5距离判断

  • **ST_Distance(geometry A, geometry B):**计算两个几何图形的最短距离;
  • ST_DWithin(geometry A, geometry B, radius): 计算两个几何图形的最短距离是否在某个范围内。(对于计算类似:道路两旁500m范围有多少树木之类的问题很有效。)

3、空间连接

:::info 空间数据库中的空间连接与标准数据库中的连接一样,都是用于之间的连接,只不过空间连接是通过几何对象的空间关系作为连接键(join key)进行连接。 :::

任何提供两个表之间真/假关系的函数都可用于空间连接,但最常用的是:ST_IntersectsST_Contains ST_DWithin

一个空间连接的示例:“Little Italy”的地铁站在哪里?它在哪条地铁线路上?

SELECT s.name, s.routes
FROM nyc_subway_stations AS s
JOIN nyc_neighborhoods AS n
ON ST_Contains(n.geom, s.geom)
WHERE n.name = 'Little Italy';