MySQL — геопространственный объект
-
14-09-2019 - |
Вопрос
Я работаю в Postgis над точками в поли, и у меня есть эта функция:
выберите * из table_name, где st_contains(column, st_setsrid(st_makepoint(-92.095109, 46.804100),4326));
столбец представляет собой мультиполи(((точки)))
Я пытаюсь найти способ выполнить подобное упражнение с MySQL и задаюсь вопросом, существуют ли для этого подобные функции.Сайт разработки MySQL очень ограничен описаниями и документацией по Multipolys.
Кто-нибудь делал что-то подобное?
Решение
MySQL не реализует множество пространственных запросов - я не знаю наверняка о содержании, но есть способы аппроксимации его и других функций.Например, вы можете определить расстояния между точками, вытащив все результаты с координатами в заданном прямоугольнике, а затем вычислив расстояние, как описано. здесь. Вы также можете использовать прямоугольники для приближения вашего contains
проблема.Во-первых, более общий синтаксис WKT на ваш выбор:
select * from table_name where contains(the_polygon, GeomFromText('POINT(12.3 45.6)');
Я думаю, что открытая спецификация для contains
не реализован, но существует функция MySQL для использования минимальный ограничивающий прямоугольник чтобы приблизительно определить, находится ли ваша точка в многоугольнике:
select * from table_name where MBRContains(the_polygon, GeomFromText('POINT(12.3 45.6)');
В итоге я стал использовать много прямоугольников в MySQL, потому что внешние границы наборов координат легко вычислить.В целом PostGIS намного лучше, но при необходимости вы можете выполнить несколько операций между базами данных.
ОБНОВЛЯТЬ:После того как этот вопрос был задан хорошее резюме было опубликовано на opengeo.org;кажется, что даже там, где это не очевидно или не указано, MySQL часто использует MBR.Также обратите внимание на собственные типы Postgres. point, lseg, box, path, polygon,
и circle
если вы хотите больше узнать о том, как работает PostGIS и почему его разработчикам 2D-функций в целом нужно меньше времени.