Если ваши точки находятся на разумном расстоянии друг от друга (то есть не за половиной мира и не за линией даты), вы можете внести поправку в разницу между широтой и долготой (поскольку градус долготы короче, кромена экваторе), а затем просто рассчитайте расстояние, как если бы земля была плоской.
Поскольку вы просто хотите отсортировать значения, вам даже не нужно использовать квадратный корень, вы можете просто добавитьквадраты различий.
Пример, где @lat
и @lng
- ваша текущая позиция, а 2
- поправка на разницу:
select *
from Points
order by (lat - @lat) * (lat - @lat) + ((lng - @lng) * 2) * ((lng - @lng) * 2)
Вы можете рассчитать поправку на разницудля определенной широты как 1 / cos(lat)
.
Сис Тиммерман придумала эту формулу, которая также работает через строку даты:
pow(lat-lat2, 2) + pow(2 * min(abs(lon-lon2), 360 - abs(lon-lon2)), 2)