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

PostGIS(PostgreSQL)查询识别无中断线串

识别无中断的线串(与其他线仅端点衔接)

以下查询可以筛选出那些仅通过端点与其他线衔接、自身未被其他线在中间截断的线串:

SELECT a.id, a.geom
FROM mapeamento_urbano.hid_trecho_drenagem_l AS a
WHERE NOT EXISTS (
    SELECT 1
    FROM mapeamento_urbano.hid_trecho_drenagem_l AS b
    WHERE a.id != b.id
    AND ST_Intersects(a.geom, b.geom)
    -- 排除两种中断情况:
    -- 1. 相交点不是a的起点/终点(a的中间被其他线截断)
    -- 2. 相交结果是线(两条线存在重叠,属于非端点衔接)
    AND (
        NOT (
            ST_Equals(ST_StartPoint(a.geom), ST_Intersection(a.geom, b.geom))
            OR ST_Equals(ST_EndPoint(a.geom), ST_Intersection(a.geom, b.geom))
        )
        OR ST_GeometryType(ST_Intersection(a.geom, b.geom)) = 'ST_LineString'
    )
);

逻辑说明

  • 用ST_Intersects检测所有与当前线有交集的其他线
  • 精准排除两类“中断”场景:
    • 交集点既不是当前线的起点也不是终点,说明当前线的中间位置被其他线截断
    • 交集为线类型,说明两条线存在重叠段,不属于端点衔接的连续情况
  • 最终返回的线,均为仅通过端点与其他线衔接、自身无中断的线串

原查询的问题分析

原查询逻辑范围过窄,导致结果不符合预期:

  1. 仅检查了对方线的终点与交集点匹配,未覆盖当前线起点与其他线衔接的情况
  2. 用ST_Touches限定了仅边界接触,遗漏了线重叠这类非端点衔接的中断场景
  3. 条件逻辑反向,错误排除了正常端点衔接的线

内容的提问来源于stack exchange,提问作者lucasmsqt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:22:25