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

ST_AREA_SQUARE_METERS

Описание​

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

Для незамкнутых геометрических объектов (например, точек, отрезков) площадь равна 0; для некорректных геометрических объектов (например, самопересекающихся многоугольников) возвращается NULL.

Синтаксис​

ST_AREA_SQUARE_METERS( <geo>)

Параметры​

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

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

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

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

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

Пример​

Круговая область (круг радиусом 1 градус)

SELECT ST_Area_Square_Meters(ST_Circle(0, 0, 1));
+-------------------------------------------------+
| st_area_square_meters(st_circle(0.0, 0.0, 1.0)) |
+-------------------------------------------------+
| 3.1415926535897869 |
+-------------------------------------------------+

Объект точки (не имеет площади)

SELECT ST_Area_Square_Meters(ST_Point(0, 1));
+-------------------------------------------+
| st_area_square_meters(st_point(0.0, 1.0)) |
+-------------------------------------------+
| 0 |
+-------------------------------------------+

Объект отрезка (не имеет площади)

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

Простая квадратная область (небольшой диапазон долготы и широты)


mysql> SELECT ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))"));
+--------------------------------------------------------------------------+
| ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))")) |
+--------------------------------------------------------------------------+
| 12364036567.076408 |
+--------------------------------------------------------------------------+

Область в форме сложного многоугольника

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

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


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

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

mysql> SELECT ST_Area_Square_Meters(ST_Circle(0, -30, 2));
+---------------------------------------------+
| ST_Area_Square_Meters(ST_Circle(0, -30, 2)) |
+---------------------------------------------+
| 12.566370614359073 |
+---------------------------------------------+

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

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

Незамкнутый многоугольник

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

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

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

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

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