【PG】PGSql常用空间判断函数
2025-11-21
中间件
00

目录

1、ST_Intersects(A,B)
2、ST_Within(A,B)
3、ST_Contains(B,A)
4、ST_Overlaps(A,B)
5、ST_Touches(A,B)
6、使用说明

总结一下常用的PGSql空间判断函数

1、ST_Intersects(A,B)

场景:判断两个几何是否 “沾边”;

判断方法:有任何交集(含边界、包含、重叠)。

2、ST_Within(A,B)

场景:判断 A 是否是 B 的 “子集”;

判断方法:A 完全在 B 内(含边界),如果两个形状完全相同也是true。

3、ST_Contains(B,A)

场景:判断 B 是否是 A 的 “父集”;

判断方法:B 完全包含 A(含边界)→ true(与 ST_Within(A,B) 等价)。

4、ST_Overlaps(A,B)

场景:两个面部分重叠、两条线部分重叠

判断方法:部分重叠(交集与 A、B 都不同,且维度相同)→ true。

5、ST_Touches(A,B)

场景:两个面共享一条边、线端点接触面对界;

判断方法:仅边界接触(无内部交集)→ true。

6、使用说明

1、使用前提:安装post-gis插件;

2、A和B必须是geometry类型的数据,且A和B的SRID必须相同

3、A和B如果不是geometry类型的数据,需要按照如下规则转化:首先构建如下的WKT文本:

展开代码
点(2D) 'POINT(116.4 39.9) Point(3D 点) POINT Z (116.4 39.9 50) Point(4D 点) 2D 坐标 + 高程 50 米 + 测量值 100 POINT ZM (116.4 39.9 50 100) LineString(线)3 个顶点组成的折线(2D) LINESTRING(116.3 39.8, 116.4 39.9, 116.5 40.0) Polygon(面) POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)) MultiPoint(多点) MULTIPOINT((116.4 39.9), (116.5 40.0), (116.6 40.1)) MultiPolygon(多面) MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((20 20, 30 20, 30 30, 20 30, 20 20)))

然后调用方法:

展开代码
WKT文本转化为geometry对象 ST_GeomFromText('POINT(116.4 39.9)', 4326) 或者 ST_GeomFromText("SRID=4490;"+WKT) 转换SRID: ST_Transform(geometry,4490 -- 目标 SRID=4490)

4、关于SRID的说明

展开代码
4326 WGS84 经纬度 3857 Web 墨卡托投影 4490 国家大地坐标系 2000 2435 北京 54 坐标系

本文作者:刘涛

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!