【问题标题】:How to convert polygon data into line segments using PostGIS如何使用 PostGIS 将多边形数据转换为线段
【发布时间】:2011-11-27 13:55:46
【问题描述】:

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

提前致谢

【问题讨论】:

    标签: sql postgresql gis postgis


    【解决方案1】:

    通常,将多边形转换为线可能并不简单,因为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中解释的问题还有一个通用的方法

    【讨论】:

      【解决方案2】:

      这是您搜索此问题时在 google 上的第一次点击。我不知道自那以后是否已经过去了这么长时间,但对于未来的谷歌人来说,ST_ExteriorRings(geom) 对我来说非常有用。 http://postgis.net/docs/ST_ExteriorRing.html

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

      【讨论】:

      • @DonaldDuck 答案并非 100% 正确。函数名是ST_ExteriorRing,而不是ST_ExteriorRings(注意结尾的s)。它生成单个线串而不是多个线段。它还排除了孔的边界。它在多面体上也失败了。
      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
      猜你喜欢
      • 2013-10-03
      • 2014-04-29
      • 1970-01-01
      • 2020-01-20
      • 2021-04-02
      • 1970-01-01
      • 2021-01-31
      • 2016-09-11
      • 2023-03-06
      相关资源
      最近更新 更多