如何使用PostGIS将多边形数据转换为线段

15

我在PostgreSQL/PostGIS中有一个多边形数据表,现在需要将这个多边形数据转换为对应的线段。请问有谁能告诉我如何使用PostGIS查询进行转换。

先行致谢

2个回答

26

通常情况下,将多边形转换为线可能并不直接,因为不存在一对一的映射,多边形的各个元素可能映射到不同的线串(外环、内环等)。

考虑到这一点,您需要分别处理每个元素,可以像以下可能的方法一样进行划分:

SELECT ST_AsText( ST_MakeLine(sp,ep) )
FROM
   -- extract the endpoints for every 2-point line segment for each linestring
   (SELECT
      ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) as sp,
      ST_PointN(geom, generate_series(2, ST_NPoints(geom)  )) as ep
    FROM
       -- extract the individual linestrings
      (SELECT (ST_Dump(ST_Boundary(geom))).geom
       FROM mypolygontable
       ) AS linestrings
    ) AS segments;

根据存储在mypolygontable中的多边形数据,您可能不仅想转储边界(如上所述使用ST_Boundary),还想转储其他元素。上面的代码具有更详细的概述,取自postgis-users列表:将多边形拆分为N条线串

此外,在PostGIS中将linestring或polygon爆炸成单个向量的通用方法也可以解决此问题


-2

当你搜索这个问题时,这是谷歌上的第一个结果。我不知道是否已经创建了一个函数,因为时间过去了这么久,但对于未来的谷歌用户,ST_ExteriorRings(geom) 对我非常有效。 http://postgis.net/docs/ST_ExteriorRing.html

SELECT ST_ExteriorRing(ST_Dump(geom)).geom)
FROM foo

@DonaldDuck 答案并不完全正确。函数名应该是 ST_ExteriorRing,而不是 ST_ExteriorRings(注意末尾的s)。它生成一个单一的线串,而不是多个线段。此外,它还排除了孔的边界。对于多边形也会出现错误。 - jpmc26
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。 - Donald Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接