You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求可提取重复线对象的PostGIS函数,`st_overlap`等无法实现

PostGIS提取重复线对象的解决方案

一、提取完全重复的线对象

如果是完全重合的线(含方向一致的情况),用ST_Equals函数即可匹配:

SELECT a.id, b.id
FROM lines a
JOIN lines b ON a.id < b.id
WHERE ST_Equals(a.geom, b.geom);

注:a.id < b.id是为了避免重复配对(比如a.id=1和b.id=2,不会再出现a.id=2和b.id=1的情况)。

如果线的方向相反但几何上完全重合,结合ST_Reverse扩展判断:

SELECT a.id, b.id
FROM lines a
JOIN lines b ON a.id < b.id
WHERE ST_Equals(a.geom, b.geom) OR ST_Equals(a.geom, ST_Reverse(b.geom));

二、提取部分重叠的线段

若要提取两个线对象的重叠部分几何,使用ST_Intersection函数,并过滤出有效线段交集:

SELECT a.id, b.id, ST_Intersection(a.geom, b.geom) AS overlapping_segment
FROM lines a
JOIN lines b ON a.id != b.id
WHERE ST_GeometryType(ST_Intersection(a.geom, b.geom)) = 'ST_LineString';

这个语句会返回两个线重叠的线段部分,同时排除仅相交于点的无效情况。

三、关于ST_Overlaps/ST_Intersects无效的原因

  • ST_Overlaps:要求两个几何对象维度相同,且交集维度与原对象一致,同时各自存在部分区域不被对方包含。完全重合的线不满足“各自有部分不在对方内”,因此返回false。
  • ST_Intersects:完全重合的线会返回true,但如果查询未排除自身匹配(比如没加a.id != b.id),或过滤条件有误,可能得不到预期结果。

内容的提问来源于stack exchange,提问作者OH.hong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:27:08