在PostGIS中,ST_Intersects判断两个几何图形是否有任何公共部分(包括边界接触),而ST_Within判断第一个几何图形是否完全位于第二个几何图形内部(边界接触不算在内),前者是相交关系(对称),后者是包含关系(不对称),两者在空间查询中有不同的应用场景。

ST_Intersects(相交)

  • 定义:当两个几何图形之间存在任何公共部分时返回TRUE
  • 判断条件:两个图形有公共点、公共线或公共面
  • 示例:
    • 两个多边形有重叠区域
    • 一条线穿过一个多边形
    • 一个点位于多边形的边界上

ST_Within(被包含)

  • 定义:当第一个几何图形完全位于第二个几何图形内部时返回TRUE
  • 判断条件:几何图形A完全在几何图形B的内部
  • 注意:与ST_Contains完全相反,即 ST_Within(A,B) 等价于 ST_Contains(B,A)
  • 示例:
    • 一个点完全在一个多边形内部
    • 一条线完全在一个多边形内部
    • 一个小多边形完全在一个大多边形内部

关键区别

特性ST_IntersectsST_Within
关系类型相交关系包含关系
返回条件有公共部分即可必须完全在内部
边界情况边界接触也算相交边界接触不算在内部
对称性对称(A∩B = B∩A)不对称(A在B内 ≠ B在A内)

实际应用示例

AND ST_Within(t.shape, ST_GeomFromText(#{req.wkt}, 4490))
AND ST_Intersects(f.geom, ST_GeomFromText(#{req.wkt}, 4490))

总结:ST_Intersects判断是否有任何交集,而ST_Within判断是否完全包含在内部,两者在空间查询中有不同的应用场景。