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 或更高版本。
在 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)
-- 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))