PostgreSQL ST_Intersects、ST_Crosses 和 ST_Overlaps的含义与区别

在空间数据库(如 PostgreSQL 的 PostGIS 扩展)中,ST_IntersectsST_CrossesST_Overlaps 是用于判断两个空间对象之间关系的函数,它们的含义和区别如下:

1. ST_Intersects(A, B)

  • 含义 :判断两个空间对象是否存在任何形式的空间交集(即至少有一个点同时属于两个对象)。
  • 范围:是最宽泛的空间关系判断,涵盖了所有 "有重叠部分" 的情况,包括完全包含、交叉、部分重叠等。
  • 示例
    • 两个多边形部分重叠;
    • 一条线穿过一个多边形;
    • 一个点落在另一个多边形内部;
    • 一个多边形完全包含另一个多边形。

2. ST_Crosses(A, B)

  • 含义 :判断两个空间对象是否 "交叉",即它们的交集非空 ,且:
    • 交集的维度低于两个对象中维度较高的那个
    • 交集不是其中一个对象的全部(即不包含)。
  • 适用场景:通常发生在不同维度的对象之间,或同维度但不形成包含 / 完全重叠的情况。
  • 示例
    • 一条线穿过一个多边形(线与面交叉,交集是线的一部分,维度低于面);
    • 两条线相交但不重合(交集是一个点,维度低于线);
    • 一个面与另一个面的边界线交叉(交集是线,维度低于面)。

3. ST_Overlaps(A, B)

  • 含义 :判断两个空间对象是否 "部分重叠",即:
    • 它们的维度相同
    • 交集的维度与它们相同(即重叠部分是同维度的子对象);
    • 交集不是其中任何一个对象的全部(即既不包含,也不完全重合)。
  • 适用场景:仅适用于同维度对象之间的部分重叠。
  • 示例
    • 两个多边形部分重叠(交集是一个多边形);
    • 两条线部分重合(交集是一条线,但不包含整条线)。

例子:

多边形完全包含点
  • A:一个多边形(面状,维度 2);

  • B:一个点(点状,维度 0),且该点位于多边形内部。

  • ST_Intersects(A, B):为(点在多边形内,有交集);

  • ST_Crosses(A, B):为(交叉要求交集维度低于高维对象且不包含,但此处点被多边形完全包含,不符合 "不包含" 条件);

  • ST_Overlaps(A, B):为(重叠要求同维度,而多边形是 2 维、点是 0 维,维度不同)。

构造数据
sql 复制代码
-- 插入一个多边形(面状,维度2)
INSERT INTO spatial_test (name, geom)
VALUES ('多边形A', ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'));

-- 插入一个位于多边形内部的点(点状,维度0)
INSERT INTO spatial_test (name, geom)
VALUES ('点B', ST_GeomFromText('POINT(5 5)'));
验证关系
sql 复制代码
-- 查询两个对象的关系
SELECT 
    ST_Intersects(A.geom, B.geom) AS intersects,
    ST_Crosses(A.geom, B.geom) AS crosses,
    ST_Overlaps(A.geom, B.geom) AS overlaps
FROM spatial_test A, spatial_test B
WHERE A.name = '多边形A' AND B.name = '点B';
结果
intersects crosses overlaps
t f f
说明
  • 点在多边形内,故ST_Intersects为真;
  • 点被完全包含,不符合ST_Crosses的 "不包含" 条件,故为假;
  • 维度不同(2 维 vs 0 维),ST_Overlaps为假。

核心区别总结

函数 核心判断条件 适用维度 包含关系? 交叉关系? 部分重叠(同维度)?
ST_Intersects 存在任何交集(最宽泛) 所有维度
ST_Crosses 交集非空,且维度低于高维对象,且不包含 不同维度或同维度 否(同维度时交集维度低)
ST_Overlaps 同维度,交集同维度,且不包含 同维度

简单来说:

  • ST_Intersects 是 "有交集就返回真";
  • ST_Crosses 是 "交集维度更低且不包含";
  • ST_Overlaps 是 "同维度且部分重叠"。
相关推荐
KaMeidebaby16 小时前
卡梅德生物技术快报|抗独特型抗体开发:半抗原检测技术瓶颈拆解,抗独特型抗体开发工程化实践
前端·数据库·人工智能·其他·百度·新浪微博
NiceCloud喜云16 小时前
Claude Files API 深入:从上传、复用到配额管理的工程化指南
android·java·数据库·人工智能·python·json·飞书
A XMan.17 小时前
域名Whois信息查询V2版API接入指南
数据库
heimeiyingwang17 小时前
【架构实战】可观测性体系:从监控到全链路追踪
网络·数据库·架构
网管NO.117 小时前
SQL 日期函数全套精讲!时间格式化、日期加减、年月日提取,做日报周报直接套用
数据库·sql
杨云龙UP17 小时前
Linux 根分区被日志吃满?一次 58G Broker 日志清理实战_2026-05-20
linux·运维·服务器·数据库·hdfs·apache
sdk大全17 小时前
Studio 3T for MongoDB 2025.13.0
数据库·mongodb
码农阿豪17 小时前
平替MongoDB:金仓多模数据库助力电子证照国产化实践
数据库·mongodb
罗超驿17 小时前
22.深入剖析JDBC架构:从原生API到企业级数据交互核心
java·数据库·mysql·面试
易辰君18 小时前
【数据库】MongoDB深度解析与Python操作指南:从安装到实战操作全覆盖
数据库·mongodb