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