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

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

0 голосов
/ 26 февраля 2019

У меня есть многоугольник, который содержит несколько координат в 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 поняла, что этот многоугольник содержит широта и долгота правильно рассчитать площадь?

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Согласно документам 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));
0 голосов
/ 02 марта 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 
...