ST_CollectionExtract — 给定一个几何集合,返回一个仅包含指定类型元素的多重几何。
geometry ST_CollectionExtract(
geometry collection)
;
geometry ST_CollectionExtract(
geometry collection, integer type)
;
给定一个几何集合,返回一个同质的多重几何。
如果未指定 type
,则返回一个仅包含最高维度几何体的多重几何。因此,多边形优先于线,线优先于点。
如果指定了 type
,则返回一个仅包含该类型的多重几何。如果没有正确类型的子几何体,则返回一个空的几何体。仅支持点、线和多边形。类型编号如下:
1 == POINT
2 == LINESTRING
3 == POLYGON
对于原子几何输入,如果输入类型与请求的类型匹配,则返回未更改的几何。否则,结果是指定类型的空几何。如果需要,可以使用 ST_Multi 将它们转换为多重几何。
不会检查多边形结果的有效性。如果多边形组件相邻或重叠,则结果将无效。(例如,将此函数应用于 ST_Split 结果时可能会发生这种情况。)可以使用 ST_IsValid 检查这种情况,并使用 ST_MakeValid 进行修复。 |
可用性:1.5.0
在 1.5.3 之前,此函数返回未更改的原子输入,无论类型如何。在 1.5.3 中,不匹配的单个几何体返回 NULL 结果。在 2.0.0 中,不匹配的单个几何体返回请求类型的空结果。 |
提取最高维度类型
SELECT ST_AsText(ST_CollectionExtract( 'GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1, 2 2) )')); st_astext --------------- MULTILINESTRING((1 1, 2 2))
提取点(类型 1 == POINT)
SELECT ST_AsText(ST_CollectionExtract( 'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))', 1 )); st_astext --------------- MULTIPOINT((0 0))
提取线(类型 2 == LINESTRING)
SELECT ST_AsText(ST_CollectionExtract( 'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))', 2 )); st_astext --------------- MULTILINESTRING((0 0, 1 1), (2 2, 3 3))