#mysql #gis #spatial
#mysql #гис #пространственный
Вопрос:
Я провожу некоторое сравнение производительности между пространственными функциями DB2 / MySQL. Однако после того, как я перевожу пространственные запросы DB2 на диалект MySQL, он жалуется на синтаксическую ошибку (ОШИБКА: пересечение функций не существует). Запрос довольно прост, как показано ниже:
SELECT Area(Intersection(a.outline, b.outline) )/Area(Union( a.outline, b.outline)) AS area_ratio, Distance(Centroid(b.outline), Centroid(a.outline) ) AS centroid_distance
FROM spatial_table1 A, spatial_table2 B ............
Изучив документацию, я обнаружил, что точные пространственные функции (пересечение, объединение) НЕ реализованы в MySQL. Это так?
Есть ли обходной путь для этого?
Ответ №1:
MBR Intersects()
Это не на 100% то же самое, потому что она проверяет, пересекаются ли ограничивающие прямые, но это близко.
Документы MySQL:http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html
Геометрические функции в MySQL:http://dev.mysql.com/doc/refman/5.0/en/geometry-property-functions.html
Обратите внимание, что только таблицы MyISAM поддерживают пространственные индексы.
UDF для ГИС, не подходит для вашего вопроса, извините:
MySQL UDF для определения расстояния на сфере: http://www.lenzg.net/archives/220-New-UDF-for-MySQL-5.1-provides-GIS-functions-distance_sphere-and-distance_spheroid.html
MySQL UDF для функций UTM:http://www.mysqludf.org/lib_mysqludf_fPROJ4/index.php
Комментарии:
1. Спасибо, Йохан. Но возвращает ли она то же самое, что возвращает ST_Intersection в DB2? Я имею в виду, согласно документации, она возвращает пересечение между минимальным ограничивающим прямоугольником. То есть результат может быть неточным? правильно ?
2. @ablimit, извините, не могу найти точное соответствие, вам придется подделать или удалить MySQL (или написать UDF) 🙁
Ответ №2:
Существует моментальный снимок разработки, который поставляется с точными пространственными функциями, реализованными «Holyfoot». Это снимок 5.1.35.