Existuje dobrý dokument o výkonu geolokace MySQL zde .
UPRAVIT Určitě to používá pevný rádius. Také si nejsem 100% jistý, že algoritmus pro výpočet vzdálenosti je nejpokročilejší (tj. „provrtá se“ Zemí).
Důležité je, že algoritmus je levný, aby vám poskytl limit počtu řad pro správné vyhledávání vzdálenosti.
Algoritmus předem filtruje kandidáty ve čtverci kolem zdrojového bodu a poté vypočítá vzdálenost v mílích .
Předem si to spočítejte nebo použijte uloženou proceduru, jak doporučuje zdroj:
# Pseudo code
# user_lon and user_lat are the source longitude and latitude
# radius is the radius where you want to search
lon_distance = radius / abs(cos(radians(user_lat))*69);
min_lon = user_lon - lon_distance;
max_lon = user_lon + lon_distance;
min_lat = user_lat - (radius / 69);
max_lat = user_lat + (radius / 69);
SELECT dest.*,
3956 * 2 * ASIN(
SQRT(
POWER(
SIN(
(user_lat - dest.lat) * pi() / 180 / 2
), 2
) + COS(
user_lat * pi() / 180
) * COS(
dest.lat * pi() / 180
) * POWER(
SIN(
(user_lon - dest.lon) * pi() / 180 / 2
), 2
)
)
) as distance
FROM dest
WHERE
dest.lon between min_lon and max_lon AND
dest.lat between min_lat and max_lat
HAVING distance < radius
ORDER BY distance
LIMIT 10