Перейти к содержимому
Последнее обновление

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 |
+----------------------------------------------------+