Я ищу быстрый способ поиска точек, находящихся на определенном расстоянии от другой данной точки. У меня есть таблица MyISAM с пространственно проиндексированными точками, представляющими географические местоположения (широта, долгота).
Если бы MySQL поддерживал это, я думаю, что ST_DWithin справился бы с этой задачей. Но это не так, поэтому я получил следующее выражение, которое использует буфер для создания круга, а затем ищет точки, которые попадают в этот круг:
ST_Within(geopoint, ST_Buffer(Point(@lat, @lng), @radius))
Кажется, он работает нормально, и я считаю, что он использует index. Но достаточно ли это хорошего решения? Насколько точны ST_Within и ST_Buffer для географических целей?
ОБНОВЛЕНИЕ. Я пришел к выводу, что MySQL не поддерживает географические координаты и что все операции выполняются на евклидовой плоскости (даже если вы укажете SRID). В зависимости от местоположения это в конечном итоге приводит к большим неточностям. Таким образом, перед использованием пространственных функций MySQL необходимо преобразовать координаты.