PostGIS拆分LineString为segment,point

一 创建测试表

创建一个测试表

 CREATE TABLE lines ( 
      gid integer primary key, 
      geom geometry(Linestring, 4326)
 );

插入测试数据

 INSERT INTO lines VALUES (1, 'SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)');
 INSERT INTO lines VALUES (2, 'SRID=4326;LINESTRING(0 1, 0 2, 0 3, 0 4)');

二 拆分成点

SELECT gid,(pt).path as ptindex,(pt).geom
FROM (SELECT gid, ST_DumpPoints(geom) AS pt FROM lines) as foo;
拆点.png

三 拆分成线

 WITH segments AS (
    SELECT gid, ST_MakeLine(lag((pt).geom, 1, NULL) OVER (PARTITION BY gid ORDER BY gid, (pt).path), (pt).geom) AS geom
      FROM (SELECT gid, ST_DumpPoints(geom) AS pt FROM lines) as dumps
    )
    SELECT * FROM segments WHERE geom IS NOT NULL;
拆segment.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容