ST_NUMPOINTS
Описание
Возвращает общее количество вершин (точек) в геометрическом объекте. Правила подсчёта зависят от типа геометрии: для Point возвращается 1, для LineString возвращается количество вершин, для Polygon возвращается общее количество вершин во всех кольцах (включая замыкающую точку), а для MultiPolygon возвращается сумма количества точек во всех составляющих полигонах.
Синтаксис
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 |
+------------------------------------------------+