ST_GEOMETRIES
描述
将几何对象拆分为其子几何组成的数组。对于集合类型(MultiPolygon),会将每个子多边形作为数组中的独立元素返回。对于非集合类型(Point、LineString、Polygon、Circle),会返回仅包含该几何对象本身的单元素数组。
语法
ST_GEOMETRIES( <shape> )
参数
| 参数 | 描述 |
|---|---|
<shape> | 输入几何,类型为 GEOMETRY 或 VARCHAR(WKT 格式),且可转换为 GEOMETRY。 |
返回值
返回 ARRAY<STRING>,其中每个元素都是一个编码后的几何对象,可与 ST_AsText 或 ST_GeometryType 等其他空间函数配合使用。
ST_GEOMETRIES 具有如下边界情况:
- 如果输入参数为
NULL,返回NULL。 - 如果输入参数无法解析为有效几何对象,返回
NULL。 - 对于非集合类型(
POINT、LINESTRING、POLYGON、CIRCLE),返回包含输入几何对象的单元素数组。 - 对于
MULTIPOLYGON,返回一个数组,其中每个元素都是一个子多边形。 - 数组元素可以继续传递给其他空间函数进行处理。
示例
Point 的几何对象(单元素数组)
SELECT ST_AsText(ST_GEOMETRIES(ST_Point(1, 2))[1]);
+------------------------------------------------+
| ST_AsText(ST_GEOMETRIES(ST_Point(1, 2))[1]) |
+------------------------------------------------+
| POINT (1 2) |
+------------------------------------------------+
Polygon 的几何对象(单元素数组)
SELECT ST_GeometryType(ST_GEOMETRIES(ST_GeometryFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'))[1]);
+----------------------------------------------------------------------------------------------------+
| ST_GeometryType(ST_GEOMETRIES(ST_GeometryFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'))[1]) |
+----------------------------------------------------------------------------------------------------+
| ST_POLYGON |
+----------------------------------------------------------------------------------------------------+
MultiPolygon 的几何对象(多个元素)
SELECT SIZE(ST_GEOMETRIES(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))')));
+----------------------------------------------------------------------------------------------------------------------+
| SIZE(ST_GEOMETRIES(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))))') |
+----------------------------------------------------------------------------------------------------------------------+
| 2 |
+----------------------------------------------------------------------------------------------------------------------+
访问 MultiPolygon 的单个元素
SELECT ST_AsText(ST_GEOMETRIES(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))'))[1]);
+----------------------------------------------------------------------------------------------------------------------------------+
| ST_AsText(ST_GEOMETRIES(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))'))[1]) |
+----------------------------------------------------------------------------------------------------------------------------------+
| POLYGON ((1 0, 1 1, 0 1, 0 0, 1 0)) |
+----------------------------------------------------------------------------------------------------------------------------------+
SELECT ST_AsText(ST_GEOMETRIES(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))'))[2]);
+----------------------------------------------------------------------------------------------------------------------------------+
| ST_AsText(ST_GEOMETRIES(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))'))[2]) |
+----------------------------------------------------------------------------------------------------------------------------------+
| POLYGON ((3 2, 3 3, 2 3, 2 2, 3 2)) |
+----------------------------------------------------------------------------------------------------------------------------------+
越界索引(返回 NULL)
SELECT ST_GEOMETRIES(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))'))[3];
+----------------------------------------------------------------------------------------------------------------------------+
| ST_GEOMETRIES(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))'))[3] |
+----------------------------------------------------------------------------------------------------------------------------+
| NULL |
+----------------------------------------------------------------------------------------------------------------------------+
NULL 参数
SELECT ST_GEOMETRIES(NULL);
+----------------------+
| ST_GEOMETRIES(NULL) |
+----------------------+
| NULL |
+----------------------+
非法参数(返回 NULL)
SELECT ST_GEOMETRIES(ST_GeometryFromText('INVALID'));
+----------------------------------------------------+
| ST_GEOMETRIES(ST_GeometryFromText('INVALID')) |
+----------------------------------------------------+
| NULL |
+----------------------------------------------------+