1、简介
接着PostGis入门的下一章节,我们来讲PostGis的空间关系,下面讲空间关系常用的函数以及他们的含义。 不了解PostGis的朋友可以看一下这篇文章:PostGIS入门指南:将PostgreSQL转变为强大的空间数据库
2、空间关系
2.1 ST_Equals
ST_Equals(几何 A,几何 B)测试两个几何的空间相等性。
- 如果两个相同类型的几何具有相同的 x,y 坐标值,即如果第二个形状等于(相同)第一个形状,则 ST_Equals 返回 TRUE。 几何意义:
- 空间相等性: 两个几何对象在空间上完全相等意味着它们覆盖相同的空间区域,并且几何形状完全一致。
- 边界和内部: ST_Equals 不仅检查两个几何对象的形状,还检查它们的边界和内部是否完全相同。
- 拓扑相等 : 这意味着两个几何对象即使在表示形式上有所不同(例如顶点顺序),只要它们覆盖相同的空间区域,也会被认为是相等的。
2.2 ST_Intersects、ST_Disjoint、ST_Crosses和ST_Overlaps
ST_Intersects 、ST_Crosses 和 ST_Overlaps 测试几何图形的内部是否相交。
2.2.1 ST_Intersects
ST_Intersects(几何 A,几何 B)返回 t (TRUE), 如果几何对象 A 和 B 之间有任何共同的空间部分。这意味着 A 和 B 之间的边界或内部有重叠或接触的部分。
2.2.2 ST_Disjoint
ST_Intersects 的反义词是 ST_Disjoint(几何 A , 几何 B)。返回 TRUE 如果几何对象 A 和 B 完全不相交,即没有任何重叠或接触。例如,如果两个多边形完全分开,没有任何公共点或边界,那么 ST_Disjoint 会返回 TRUE。
2.2.3 ST_Crosses
ST_Crosses(geometry A, geometry B) 返回 TRUE,如果两个几何对象相交,并且交集位于两个几何对象的内部,同时交集的维度比源几何对象的最大维度小1。 在理解 ST_Crosses 的定义时,重要的是要了解几何对象的维度:
- 点:0 维
- 线串:1 维
- 多边形:2 维
- 多面体:3 维
2.2.4 ST_Overlaps
ST_Overlaps (几何 A,几何 B)比较两个相同尺寸的几何,如果它们的交集导致几何不同但尺寸相同,则返回 TRUE。 ST_Overlaps(geometry A, geometry B) 返回 TRUE,如果以下条件同时满足:
- 几何对象 A 和 B 的维度相同。
- 几何对象 A 和 B 的交集是一个具有相同维度的几何对象。
- 几何对象 A 和 B 的交集部分导致一个新的几何对象,这个新的几何对象与 A 和 B 都不完全相同。
- 交集部分的几何尺寸与 A 和 B 相同。
2.3 ST_Touches
ST_Touches测试两个几何体是否在其边界处相交,但在其内部不相交
2.4 ST_Within和ST_Contains
T_Within 和ST_Contains测试一个几何图形是否完全位于另一个几何图形中。
2.4.1 ST_Within
ST_Within(geometry A , geometry B) 如果第一个几何图形完全位于第二个几何图形中,则返回 TRUE。ST_Within测试的结果与ST_Contains完全相反。
2.4.2 ST_Contains
ST_Contains(geometry A, geometry B) 如果第二个几何完全包含在第一个几何中,则返回 TRUE。
2.5 ST_Distance和ST_DWithin
一个非常常见的 GIS 问题是"查找其他东西距离 X 内的所有东西"。 ST_Distance(几何 A,几何 B)计算两个几何之间的最短距离,并将其作为浮点数返回。这对于实际报告对象之间的距离很有用。 为了测试两个对象是否在彼此的距离范围内,ST_DWithin 函数提供了索引加速的真/假测试。这对于诸如"道路 500 米缓冲区内有多少棵树"之类的问题很有用。您不必计算实际的缓冲区,只需测试距离关系即可。
PS:
大家好,我是小健,Java开发工程师一枚,我会持续发一些技术推文,偶尔也会发些工作求职,互联网热点的事情,希望各位小伙伴多多支持,如果觉得本篇文章对您有所帮助,记得点赞关注收藏喔~