ST_GEOMETRIES
Описание
Разбивает геометрический объект на массив составляющих его геометрий. Для типов коллекций (MultiPolygon) возвращает каждый составляющий полигон как отдельный элемент массива. Для типов, не являющихся коллекциями (Point, LineString, Polygon, Circle), возвращает массив из одного элемента, содержащий сам геометрический объект.
Начиная с 4.1.2
Синтаксис
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 |
+----------------------------------------------------+