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 есть более короткая строка для мотыги в целом.