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

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