名稱

ST_Dump — 傳回幾何組件的 geometry_dump 列集合。

概要

geometry_dump[] ST_Dump(geometry g1);

描述

一個傳回集合的函數 (SRF),用於提取幾何圖形的組件。它傳回一個 geometry_dump 列的集合,其中每一列都包含一個幾何圖形(geom 欄位)和一個整數陣列(path 欄位)。

對於原子幾何類型(POINT、LINESTRING、POLYGON),會傳回單一記錄,其中 path 陣列為空,並且輸入幾何圖形作為 geom。對於集合或多重幾何圖形,則會為每個集合組件傳回一筆記錄,而 path 表示該組件在集合內的位置。

ST_Dump 用於擴展幾何圖形。它是 ST_Collect / GROUP BY 的反向操作,它會建立新的列。例如,它可以被用來將 MULTIPOLYGONS 擴展成 POLYGONS。

增強功能:2.0.0 引入了對多面體表面、三角形和 TIN 的支援。

可用性:PostGIS 1.0.0RC1。需要 PostgreSQL 7.3 或更高版本。

[Note]

在 1.3.4 之前的版本中,如果使用的幾何圖形包含 CURVES,此函數會崩潰。此問題已在 1.3.4+ 版本中修復。

這個方法支援圓弧字串和曲線。

此函數支援多面體表面。

此函數支援三角形和不規則三角網格表面 (TIN)。

此函數支援 3D 並且不會丟失 z 索引。

標準範例

SELECT sometable.field1, sometable.field1,
      (ST_Dump(sometable.geom)).geom AS geom
FROM sometable;

-- Break a compound curve into its constituent linestrings and circularstrings
SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)
  FROM ( SELECT (ST_Dump(p_geom)).geom AS geom
         FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))') AS p_geom) AS b
        ) AS a;
          st_asewkt          | st_hasarc
-----------------------------+----------
 CIRCULARSTRING(0 0,1 1,1 0) | t
 LINESTRING(1 0,0 1)         | f
(2 rows)

多面體表面、TIN 和三角形範例

-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt
  FROM (SELECT ST_Dump(ST_GeomFromEWKT('POLYHEDRALSURFACE(
((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),  ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),  ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1))
)') ) AS p_geom )  AS a;

 path |                geom_ewkt
------+------------------------------------------
    1 | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0))
    2 | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))
    3 | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
    4 | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0))
    5 | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0))
    6 | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
-- TIN --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_Dump( ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )') ) AS gdump
    ) AS g;
-- result --
 path |                 wkt
------+-------------------------------------
 {1}  | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0))
 {2}  | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))