что такое функция MySQL, которая эквивалентна функции DB2 / PostGIS «ST_Intersection»?

#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.