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

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