Name

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

Synopsis

geometry ST_CollectionExtract(geometry collection);

geometry ST_CollectionExtract(geometry collection, integer type);

描述

给定一个几何集合,返回同种类型多几何。

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

如果指定了类型,则返回仅包含指定类型的多几何。 如果没有指定类型的元素,则返回 EMPTY 几何图形。 仅支持点、线和面。 类型编号如下:

  • 1 == POINT

  • 2 == LINESTRING

  • 3 == POLYGON

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

[Warning]

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

可用性:1.1.0

[Note]

在 1.5.3 之前,无论类型如何,该函数都会返回同种类型的基本几何输入。在 1.5.3 中,不匹配的单个几何图形返回 NULL 结果。 在 2.0.0 中,不匹配的单个几何图形返回请求类型的 EMPTY 结果。

示例

提取最大维度类型:

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1, 2 2) )'));
    st_astext
    ---------------
    MULTILINESTRING((1 1, 2 2))

提取点(type 1 == POINT):

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',
        1 ));
    st_astext
    ---------------
    MULTIPOINT((0 0))

提取线(type 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))