名称

ST_CollectionExtract — 给定一个几何集合,返回一个仅包含指定类型元素的多几何体。

概要

geometry ST_CollectionExtract(geometry collection);

geometry ST_CollectionExtract(geometry collection, integer type);

描述

给定一个几何集合,返回一个同构的多几何体。

如果未指定type,则返回一个仅包含最高维度的几何体的多几何体。因此,多边形优先于线,线优先于点。

如果指定了type,则返回一个仅包含该类型几何体的多几何体。如果没有正确类型的子几何体,则返回一个空几何体。仅支持点、线和多边形。类型编号为

  • 1 == POINT

  • 2 == LINESTRING

  • 3 == POLYGON

对于原子几何输入,如果输入类型与请求类型匹配,则返回几何体不变。否则,结果是指定类型的空几何体。如果需要,可以使用ST_Multi将它们转换为多几何体。

[Warning]

MultiPolygon 结果未检查有效性。如果多边形组件相邻或重叠,则结果将无效。(例如,这可能发生在将此函数应用于ST_Split 结果时。)可以使用ST_IsValid 检查这种情况,并使用ST_MakeValid 修复。

可用性:1.5.0

[Note]

在 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))

另请参阅

ST_CollectionHomogenizeST_MultiST_IsValidST_MakeValid