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

如何仅按顶点分割LineString几何图形而非交叉点?

解决方案

你的需求是将LineString仅按原始顶点分割为相邻顶点组成的小线段,当前查询的问题可能出在排序逻辑冗余,或是你误解了结果(ST_DumpPoints只会返回几何的原始顶点,不会自动引入交叉点)。以下是修正后的查询,确保严格按原始顶点顺序生成线段:

WITH gpx_line AS (
  SELECT 
    uuid,
    ST_MakeLine(lag((pt).geom) OVER (PARTITION BY uuid ORDER BY (pt).path), (pt).geom) AS wkb_geometry
  FROM (
    SELECT uuid, ST_DumpPoints(wkb_geometry) AS pt 
    FROM public.points_gpx_to_line
    -- 过滤仅处理LineString类型,避免MultiLineString干扰
    WHERE ST_GeometryType(wkb_geometry) = 'ST_LineString'
  ) AS dumps
)
SELECT uuid, ST_AsText(wkb_geometry) AS wkb_geometry_text
FROM gpx_line 
WHERE wkb_geometry IS NOT NULL;

关键修改说明

  • 移除了ORDER BY中的冗余uuid:由于已按uuid分区,只需按顶点的路径顺序(pt).path排序,即可保证顶点的原始顺序正确
  • 添加LineString类型过滤:避免MultiLineString的顶点被混在一起处理(若数据包含MultiLineString,需先用ST_Dump拆分后再处理)
  • 调整ST_AsText位置:将文本转换移到最终查询中,避免中间结果转为文本影响后续几何操作(若需保留二进制几何,可去掉ST_AsText,直接返回wkb_geometry)

若结果中仍出现交叉点分割,大概率是原始LineString本身在交叉处就存在顶点,而非查询导致。可通过ST_NPoints(wkb_geometry)查看原始LineString的顶点数量,对比分割后的线段数量(应为顶点数-1)来验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:01:05