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