ST_Area() для широты и долготы

У меня есть многоугольник, который содержит несколько координат в MariaDB:

POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))

Я хочу рассчитать площадь этого многоугольника с помощью MariaDB следующим образом:

SELECT ST_Area(ST_GeomFromText('POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))'))

Результатом приведенного выше запроса является 15.546039738650009, что является неправильным. Я рассчитал площадь многоугольника с помощью этот инструмент, и он дает мне 119116192747.1.

Что мне нужно сделать, чтобы mariaDB поняла, что этот многоугольник содержит широту и долготу для правильного расчета площади?


person Sky    schedule 26.02.2019    source источник
comment
Вы пытались установить SRID? dbfiddle.uk/   -  person Paul Spiegel    schedule 28.02.2019
comment
@PaulSpiegel Да, но я не знаю, как это сделать в MariaDB. см.: dbfiddle.uk/   -  person Sky    schedule 01.03.2019
comment
Боюсь, здесь MariaDB сильно отстает от MySQL. Я даже не знаю, как получить расстояние в метрах.   -  person Paul Spiegel    schedule 01.03.2019
comment
Единицы одинаковые?   -  person Rick James    schedule 12.03.2019


Ответы (2)


Согласно документам MariaDB, он не предоставляет эту функцию:

В MariaDB значение SRID — это просто целое число, связанное со значением геометрии. Все расчеты выполнены в предположении евклидовой (плоской) геометрии.

Однако в Mysql 8.0.13 эта функция предоставляется, вы можете вычислить площадь многоугольника с помощью ST_Area():

Несовместимое изменение: ранее функция ST_Area() поддерживала только аргументы геометрии, имеющие декартову систему пространственной привязки (SRS), и выдавала ошибку при вызове с аргументами геометрии, указывающими географическую SRS. ST_Area() теперь поддерживает аргументы геометрии, имеющие географическую SRS, и возвращает геодезическую площадь в квадратных метрах.

Итак, если вы измените свою базу данных на MYSQL> 8.0.13, вы можете рассчитать площадь многоугольника, используя этот запрос:

SELECT ST_Area(ST_PolyFromText('POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))', 4326));
person Daniel.V    schedule 03.03.2019

MariaDB хранит SRID и ругается при попытке работать с геометрией со смешанными SRID, но на самом деле не выполняет никаких операций пространственной привязки/проекции. Так что мир плоский, независимо от того, какой SRID вы используете.

MySQL делал то же самое до MySQL 5.7, но, начиная с MySQL 8.0, имеет настоящую поддержку пространственной привязки, по крайней мере, отчасти.

Например. теперь он правильно возвращает расстояние между двумя градусами широты как ~ 111 км, а не просто «1»:

> SELECT st_distance(st_geomfromtext('POINT(50.0 10)', 4326), st_geomfromtext('POINT(51.0 10)', 4326)):
        111239.69315297529

Однако поддержка пространственной привязки для ST_AREA() поддерживается только начиная с версии 8.0.13. До этого вы получите при использовании SRID, отличного от 0 (декартова плоскость):

> SELECT ST_Area(ST_GeomFromText('POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))', 4326));
ERROR 3618 (22S00): st_area(POLYGON) has not been implemented for geographic spatial reference systems.

Однако с MySQL >= 8.0.13 вы получите ожидаемый результат:

> SELECT ST_Area(ST_GeomFromText('POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))', 4326));
    119085646585.42969 
person Hartmut Holzgraefe    schedule 02.03.2019