Расстояние d между двумя точками с координатами {lat1, lon1} и {lat2, lon2} задается как
d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
Выше формула дает d в радианах.Чтобы получить ответ в км, используйте формулу ниже.
distance_km ≈ radius_km * distance_radians ≈ 6371 * d
Здесь магическое число 6371 составляет ок.радиус планеты Земля.Это минимальное вычисление, которое вам придется сделать в вашем случае.Вы можете вычислить это расстояние и выбрать все записи, у которых расстояние меньше вашего значения радиуса.
Лучший подход
Вы можете использовать Elasticsearch , которыйподдерживает геолокационные запросы для повышения производительности.