【发布时间】:2011-11-27 13:55:46
【问题描述】:
我在 PostgreSQL/PostGIS 中有一个多边形数据表。现在我需要将此 Polygon 数据转换为其相应的线段。谁能告诉我如何使用 PostGIS 查询进行转换。
提前致谢
【问题讨论】:
标签: sql postgresql gis postgis
我在 PostgreSQL/PostGIS 中有一个多边形数据表。现在我需要将此 Polygon 数据转换为其相应的线段。谁能告诉我如何使用 PostGIS 查询进行转换。
提前致谢
【问题讨论】:
标签: sql postgresql gis postgis
通常,将多边形转换为线可能并不简单,因为there is no one-to-one mapping 和多边形的各种元素映射到不同的线串(外环、内环等)。
考虑到这一点,您需要按照如下可能的方法分别拆分每个:
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 列表:Split a polygon to N linestrings
Exploding a linestring or polygon into individual vectors in PostGIS中解释的问题还有一个通用的方法
【讨论】:
这是您搜索此问题时在 google 上的第一次点击。我不知道自那以后是否已经过去了这么长时间,但对于未来的谷歌人来说,ST_ExteriorRings(geom) 对我来说非常有用。 http://postgis.net/docs/ST_ExteriorRing.html
SELECT ST_ExteriorRing(ST_Dump(geom)).geom)
FROM foo
【讨论】:
ST_ExteriorRing,而不是ST_ExteriorRings(注意结尾的s)。它生成单个线串而不是多个线段。它还排除了孔的边界。它在多面体上也失败了。