postGIS的空间关系常用函数

参考链接:https://zhuanlan.zhihu.com/p/62565501

一、ST_Equals

ST_Equals(geometry A, geometry B)用于测试两个图形的空间相等性。

如果两个相同类型的几何图形具有相同的x、y坐标值,即如果第二个图形与第一个图形的空间形状与位置相等(空间相等性),则ST_Equals()返回TRUE。

二、ST_Intersects、ST_Disjoint、ST_Crosses和ST_Overlaps

ST_Intersects、ST_Crosses和ST_Overlaps都用于测试几何图形内部是否相交。

如果两个图形有相同的空间部分,即如果它们的边界或内部相交,则ST_Intersects(geometry A, geometry B)返回TRUE。

ST_Intersects()方法的对立方法是ST_Disjoint(geometry A, geometry B)。

如果两个几何图形没有相交的部分,则它们不相交,反之亦然。

事实上测试"not intersect"(!ST_Intersects)通常比测试"disjoint"(ST_Disjoint)更有效,因为intersect测试会自动使用空间索引。

对于multipoint/polygon、multipoint/linestring、linestring/linestring、linestring/polygon和linestring/multipolygon的比较,如果相交生成的几何图形的维度小于两个源几何图形的最大维度,且相交集位于两个源几何图形的内部,则ST_Crosses(geometry A, geometry B)将返回TRUE(其实就是判断两个几何图形是否交叉)。

ST_Overlaps(geometry A, geometry B)比较两个相同维度的几何图形,如果它们的结果集与两个源几何图形都不同但具有相同维度,则返回TRUE(其实就是判断两个几何图形是否叠置)。

三、ST_Touches

ST_Touches()测试两个几何图形是否在它们的边界上接触,但在它们的内部不相交。

如果两个几何图形的边界相交,或者只有一个几何图形的内部与另一个几何图形的边界相交,则ST_Touches(geometry A, geometry B)将返回TRUE。

四、ST_Within和ST_Contains

ST_Within()和ST_Contains()测试一个几何图形是否完全位于另一个几何图形内。

如果第一个几何图形完全位于第二个几何图形内,则ST_Within(geometry A, geometry B)返回TRUE,ST_Within()测试的结果与ST_Contains()完全相反。

如果第二个几何图形B完全包含在第一个几何图形A内,则ST_Contains(geometry A, geometry B)返回TRUE。

五、ST_Distance和ST_DWithin

一个常见的GIS问题是"找到这个物体周围距离它X的所有其他物体"。

ST_Distance(geometry A, geometry B)计算两个几何图形之间的最短距离,并将其作为浮点数返回。这对于实际报告几何图形之间的距离非常有用。

为了测试两个几何图形之间的距离是否在某个范围之内,ST_DWithin()函数提供了一个基于索引加速的功能。

这对于"在距离道路500米的缓冲区内有多少棵树?"这样的问题很有用,你不必计算实际的缓冲区,只需测试距离关系即可。

六、空间关系练习

下面是我们在文章上面部分涉及到的一些函数,它们应该对练习有用!

    • sum(expression) aggregate to return a sum for a set of records
    • count(expression) aggregate to return the size of a set of records
    • ST_Contains(geometry A, geometry B) returns true if geometry A contains geometry B
    • ST_Crosses(geometry A, geometry B) returns true if geometry A crosses geometry B
    • ST_Disjoint(geometry A , geometry B) returns true if the geometries do not “spatially intersect”
    • ST_Distance(geometry A, geometry B) returns the minimum distance between geometry A and geometry B
    • ST_DWithin(geometry A, geometry B, radius) returns true if geometry A is radius distance or less from geometry B
    • ST_Equals(geometry A, geometry B) returns true if geometry A is the same as geometry B
    • ST_Intersects(geometry A, geometry B) returns true if geometry A intersects geometry B
    • ST_Overlaps(geometry A, geometry B) returns true if geometry A and geometry B share space, but are not completely contained by each other.
    • ST_Touches(geometry A, geometry B) returns true if the boundary of geometry A touches geometry B
    • ST_Within(geometry A, geometry B) returns true if geometry A is within geometry B
 
posted @ 2022-12-06 16:55  一两米  阅读(534)  评论(0编辑  收藏  举报