ST_NUMPOINTS
Описание
Возвращает общее количество вершин (точек) в геометрическом объекте. Для разных типов геометрии действуют следующие правила подсчёта: для Point возвращается 1, для LineString — количество вершин, для Polygon — общее количество вершин во всех кольцах (включая замыкающую точку), а для MultiPolygon — сумма количества точек во всех составляющих его полигонах.
Начиная с версии 4.1.2
Синтаксис
ST_NUMPOINTS( <shape> )
Параметры
| Параметр | Описание |
|---|---|
<shape> | Входная геометрия типа GEOMETRY или VARCHAR (в формате WKT), которую можно преобразовать в GEOMETRY. |
Возвращаемое значение
Возвращает значение типа BIGINT, представляющее общее количество точек в геометрическом объекте.
Особые случаи для ST_NUMPOINTS:
- Если входной параметр равен
NULL, возвращаетсяNULL. - Если входной параметр не удаётся разобрать как корректный геометрический объект, возвращается
NULL. - Для
POINTвозвращается1. - Для
LINESTRINGвозвращается количество вершин линии. - Для
POLYGONвозвращается общее количество вершин во всех кольцах (внешнее кольцо + внутренние кольца). Каждое кольцо включает замыкающую точку. - Для
MULTIPOLYGONвозвращается сумма количества точек во всех составляющих его полигонах. - Для
CIRCLEвозвращается-1(у окружностей нет дискретных вершин).
Пример
Количество точек в объекте Point
SELECT ST_NUMPOINTS(ST_Point(1, 2));
+------------------------------+
| ST_NUMPOINTS(ST_Point(1, 2)) |
+------------------------------+
| 1 |
+------------------------------+
Количество точек в объекте LineString
SELECT ST_NUMPOINTS(ST_GeometryFromText('LINESTRING(0 0, 1 1, 2 2)'));
+-------------------------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('LINESTRING(0 0, 1 1, 2 2)')) |
+-------------------------------------------------------------------+
| 3 |
+-------------------------------------------------------------------+
Количество точек в объекте Polygon (квадрат)
SELECT ST_NUMPOINTS(ST_GeometryFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'));
+----------------------------------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))')) |
+----------------------------------------------------------------------------+
| 5 |
+----------------------------------------------------------------------------+
Количество точек в объекте Polygon с отверстием
SELECT ST_NUMPOINTS(ST_GeometryFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 2 1, 2 2, 1 2, 1 1))'));
+-----------------------------------------------------------------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 2 1, 2 2, 1 2, 1 1))')) |
+-----------------------------------------------------------------------------------------------------------+
| 10 |
+-----------------------------------------------------------------------------------------------------------+
Количество точек в объекте MultiPolygon
SELECT ST_NUMPOINTS(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))'));
+--------------------------------------------------------------------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))')) |
+--------------------------------------------------------------------------------------------------------------+
| 10 |
+--------------------------------------------------------------------------------------------------------------+
Количество точек в объекте Circle (возвращает -1)
SELECT ST_NUMPOINTS(ST_Circle(0, 0, 100));
+--------------------------------------+
| ST_NUMPOINTS(ST_Circle(0, 0, 100)) |
+--------------------------------------+
| -1 |
+--------------------------------------+
Параметр NULL
SELECT ST_NUMPOINTS(NULL);
+---------------------+
| ST_NUMPOINTS(NULL) |
+---------------------+
| NULL |
+---------------------+
Некорректный параметр (возвращает NULL)
SELECT ST_NUMPOINTS(ST_GeometryFromText('INVALID'));
+------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('INVALID')) |
+------------------------------------------------+
| NULL |
+------------------------------------------------+