Последнее обновление
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 |
+--------------------------------------------------------+