寻求可允许多边形共享边的ST_Intersects替代空间函数
解决方案
你需要的是仅当两个多边形存在内部交集(而非仅共享边界)时返回true,可以通过ST_Intersects结合ST_Touches来实现:
SELECT entity_number FROM coordinates WHERE ST_INTERSECTS($1, location) AND NOT ST_TOUCHES($1, location)
函数说明
ST_Intersects($1, location):会返回所有存在交集的情况,包括多边形互相穿过、一个包含另一个、仅共享边这三类场景。ST_Touches($1, location):仅当两个几何体仅在边界接触、无内部重叠时返回true(也就是你想排除的共享边场景)。
通过AND NOT ST_TOUCHES,就能精准过滤掉仅共享边的情况,只保留真正有内部相交的结果。
其他函数的适配性说明
ST_Covers/ST_Contains:仅能判断一个几何体完全覆盖/包含另一个,无法检测部分重叠的场景,不符合需求。ST_ContainsProperly:要求一个几何体完全在另一个内部且边界无接触,同样无法覆盖部分重叠的情况。ST_DWithin:是基于距离的判断,和多边形相交逻辑无关,不适用。
内容的提问来源于stack exchange,提问作者ABDULLOKH MUKHAMMADJONOV
相关产品推荐
相关产品推荐

