我在PostgreSQL/PostGIS中有一个多边形数据表,现在需要将这个多边形数据转换为对应的线段。请问有谁能告诉我如何使用PostGIS查询进行转换。
先行致谢
我在PostgreSQL/PostGIS中有一个多边形数据表,现在需要将这个多边形数据转换为对应的线段。请问有谁能告诉我如何使用PostGIS查询进行转换。
先行致谢
通常情况下,将多边形转换为线可能并不直接,因为不存在一对一的映射,多边形的各个元素可能映射到不同的线串(外环、内环等)。
考虑到这一点,您需要分别处理每个元素,可以像以下可能的方法一样进行划分:
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条线串
当你搜索这个问题时,这是谷歌上的第一个结果。我不知道是否已经创建了一个函数,因为时间过去了这么久,但对于未来的谷歌用户,ST_ExteriorRings(geom) 对我非常有效。 http://postgis.net/docs/ST_ExteriorRing.html
SELECT ST_ExteriorRing(ST_Dump(geom)).geom)
FROM foo
ST_ExteriorRing
,而不是ST_ExteriorRings
(注意末尾的s
)。它生成一个单一的线串,而不是多个线段。此外,它还排除了孔的边界。对于多边形也会出现错误。 - jpmc26