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

ST_LENGTH

Описание​

Возвращает длину линейного геометрического объекта на сфере или периметр границ площадного геометрического объекта в метрах. Для вычислений функция использует сферическую модель Земли.

  • Для LINESTRING или MULTILINESTRING возвращает сумму расстояний по дугам больших кругов для всех сегментов на сфере, то есть длину линейного объекта.
  • Для POLYGON или MULTIPOLYGON возвращает суммарную длину внешней и внутренних границ (отверстий) на сфере, вычисленную по дугам больших кругов, то есть периметр площадного объекта.
  • Для CIRCLE возвращает длину окружности, вычисляемую по формуле 2 * π * radius.
  • Для POINT возвращает 0.0.

Синтаксис​

ST_LENGTH( <shape> )

Параметры​

ПараметрОписание
<shape>Входной геометрический объект типа GEOMETRY или строка типа VARCHAR (в формате WKT), которую можно преобразовать в GEOMETRY. Поддерживаются такие типы, как LINESTRING, POLYGON, CIRCLE, POINT.

Возвращаемое значение​

Возвращает длину или периметр геометрического объекта в метрах (тип DOUBLE).

Особые случаи поведения ST_LENGTH:

  • Если входной параметр равен NULL, возвращает NULL.
  • Если входной параметр не удаётся преобразовать в корректный геометрический объект, возвращает NULL.
  • Если входной геометрический объект представляет собой POINT или линию нулевой длины, возвращает 0.0.
  • Для типа CIRCLE при создании с помощью ST_CIRCLE радиус необходимо задавать в метрах, чтобы получить корректную длину окружности (в метрах).

Пример​

Вычисление длины линии (LINESTRING)

-- Calculate the length of a line segment with a 1-degree longitude difference on the equator
SELECT ST_LENGTH(ST_GeometryFromText('LINESTRING(0 0, 1 0)'));
+--------------------------------------------------------+
| ST_LENGTH(ST_GeometryFromText('LINESTRING(0 0, 1 0)')) |
+--------------------------------------------------------+
| 111195.1011774839 |
+--------------------------------------------------------+

Вычисление периметра многоугольника (POLYGON)

-- Calculate the perimeter of a small square with a side length of approximately 0.0009 degrees (~100 meters)
SELECT ST_LENGTH(ST_GeometryFromText('POLYGON((-0.00045 -0.00045, 0.00045 -0.00045, 0.00045 0.00045, -0.00045 0.00045, -0.00045 -0.00045))')) AS perimeter;
+-------------------+
| perimeter |
+-------------------+
| 400.3023642327689 |
+-------------------+

Вычисление длины окружности (CIRCLE)

-- Calculate the circumference of a circle with a radius of 100 meters
SELECT ST_LENGTH(ST_Circle(0, 0, 100));
+---------------------------------+
| ST_LENGTH(ST_Circle(0, 0, 100)) |
+---------------------------------+
| 628.3185307179587 |
+---------------------------------+

Длина точки

SELECT ST_LENGTH(ST_GeometryFromText('POINT(1 1)'));
+----------------------------------------------+
| ST_LENGTH(ST_GeometryFromText('POINT(1 1)')) |
+----------------------------------------------+
| 0 |
+----------------------------------------------+

Некорректный параметр (возвращает NULL)

SELECT ST_LENGTH('NOT_A_GEOMETRY');
+-----------------------------+
| ST_LENGTH('NOT_A_GEOMETRY') |
+-----------------------------+
| NULL |
+-----------------------------+

Параметр NULL

SELECT ST_LENGTH(NULL);
+-----------------+
| ST_LENGTH(NULL) |
+-----------------+
| NULL |
+-----------------+

Длина сложного линейного объекта

-- Calculate the total length of a polyline
SELECT ST_LENGTH(ST_LineFromText("LINESTRING (0 0,1 0,1 1)"));
+--------------------------------------------------------+
| ST_LENGTH(ST_LineFromText("LINESTRING (0 0,1 0,1 1)")) |
+--------------------------------------------------------+
| 222390.2023549679 |
+--------------------------------------------------------+