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

ST_AREA_SQUARE_KM

Описание​

Вычисляет площадь замкнутой области на поверхности Земли в квадратных километрах. Входной параметр представляет собой геометрический объект (например, GeoPolygon, GeoCircle, GeoMultiPolygon), задающий область на поверхности Земли.

Синтаксис​

ST_AREA_SQUARE_KM( <geo>)

Параметры​

ПараметрыОписание
<geo>Геометрический объект на поверхности Земли типа GeoPolygon, GeoCircle или GeoMultiPolygon, который должен образовывать замкнутую область.

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

Возвращает площадь области в квадратных километрах в виде значения типа DOUBLE.

Особые случаи для ST_AREA_SQUARE_KM:

  • Возвращает NULL, если входной параметр равен NULL.
  • Возвращает NULL, если входной геометрический объект некорректен (например, имеет самопересечения или нулевую площадь).
  • Если входной геометрический объект не замкнут (например, точка GeoPoint или отрезок GeoLineString), возвращает 0.
  • Возвращает NULL, если какая-либо координата выходит за допустимый диапазон долготы или широты (долгота [-180, 180], широта [-90, 90]).

Пример​

Небольшая квадратная область (небольшой диапазон долготы и широты) со сторонами примерно по 1° и площадью примерно 12,364 квадратных километров.

SELECT ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))"));
+----------------------------------------------------------------------+
| st_area_square_km(st_polygon('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))')) |
+----------------------------------------------------------------------+
| 12364.036567076409 |
+----------------------------------------------------------------------+

Прямоугольная область большего размера

mysql> SELECT ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"));
+--------------------------------------------------------------------------+
| ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))")) |
+--------------------------------------------------------------------------+
| 1233204.7035253085 |
+--------------------------------------------------------------------------+

Сложный многоугольник с криволинейными рёбрами

mysql> SELECT ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 5 1, 10 0, 5 -1, 0 0))"));
+------------------------------------------------------------------------+
| ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 5 1, 10 0, 5 -1, 0 0))")) |
+------------------------------------------------------------------------+
| 123725.16642083102 |
+------------------------------------------------------------------------+

Область, пересекающая меридиан 180°

mysql> SELECT ST_Area_Square_Km(ST_Polygon("POLYGON ((179 0, 180 0, 180 1, 179 1, 179 0))"));
+--------------------------------------------------------------------------------+
| ST_Area_Square_Km(ST_Polygon("POLYGON ((179 0, 180 0, 180 1, 179 1, 179 0))")) |
+--------------------------------------------------------------------------------+
| 12364.036567076282 |
+--------------------------------------------------------------------------------+

Область в Южном полушарии

mysql> SELECT ST_Area_Square_Km(ST_Polygon("POLYGON ((0 -10, 10 -10, 10 -20, 0 -20, 0 -10))"));
+----------------------------------------------------------------------------------+
| ST_Area_Square_Km(ST_Polygon("POLYGON ((0 -10, 10 -10, 10 -20, 0 -20, 0 -10))")) |
+----------------------------------------------------------------------------------+
| 1195196.6541230455 |
+----------------------------------------------------------------------------------+

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

mysql> SELECT ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"));
+----------------------------------------------------------------------+
| ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))")) |
+----------------------------------------------------------------------+
| NULL |
+----------------------------------------------------------------------+

Координаты за пределами допустимого диапазона

mysql> SELECT ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 200 0, 200 1, 0 1, 0 0))"));
+--------------------------------------------------------------------------+
| ST_Area_Square_Km(ST_Polygon("POLYGON ((0 0, 200 0, 200 1, 0 1, 0 0))")) |
+--------------------------------------------------------------------------+
| NULL |
+--------------------------------------------------------------------------+

Входное значение NULL

mysql> SELECT ST_Area_Square_Km(NULL);
+-------------------------+
| ST_Area_Square_Km(NULL) |
+-------------------------+
| NULL |
+-------------------------+

Вычисление площади круга

mysql> SELECT ST_Area_Square_Km(ST_Circle(0, 0, 1));
+---------------------------------------+
| ST_Area_Square_Km(ST_Circle(0, 0, 1)) |
+---------------------------------------+
| 3.141592653589787e-06 |
+---------------------------------------+

Точечный объект (нулевая площадь)

SELECT ST_Area_Square_Km(ST_Point(0, 1));
+-------------------------------------------+
| st_area_square_km(st_point(0.0, 1.0)) |
+-------------------------------------------+
| 0 |
+-------------------------------------------+

Линейный объект (нулевая площадь)

SELECT ST_Area_Square_Km(ST_LineFromText("LINESTRING (1 1, 2 2)"));
+-----------------------------------------------------------------+
| st_area_square_km(st_linefromtext('LINESTRING (1 1, 2 2)')) |
+-----------------------------------------------------------------+
| 0 |
+-----------------------------------------------------------------+