Для каждой имеющейся у меня координаты я нахожу расстояние от экватора в километрах, что дает мне два расстояния:
from pyproj import Geod
wgs84_geod = Geod(ellps='WGS84')
_,_, lon_dist = wgs84_geod.inv(0, 0,lon, 0)
_,_, lat_dist = wgs84_geod.inv(0, 0,0, lat)
В качестве проверки работоспособности я могу пересчитать исходную координату из этих значений следующим образом (предположим, что направление от координаты экватора (0,0) - север и запад:
_, new_lat, _ = wgs84_geod.fwd(0,0, 0, lat_dist)
new_lon, _, _ = wgs84_geod.fwd(0, 0, 90, lon_dist)
Это возвращает мне те же координаты, с которых я начал.
Теперь я хочу найти ближайшую к моей координате точку в километре. Я округляю lon_dist и lat_dist до километров от значений экватора.
lat_km_dist = round(lat_dist/1000)*1000 #to nearest km and back to meters
lon_km_dist = round(lon_dist/1000)*1000
Я получаю координаты, используя эти расстояния так же, как и раньше
_, km_lat, _ = wgs84_geod.fwd(0,0, 0, lat_km_dist)
km_lon, _, _ = wgs84_geod.fwd(0, 0, 90, lon_km_dist)
Логика должна заключаться в том, что для нескольких координат в одной и той же области ближайшее расстояние между любой парой km_lat, km_lon должно быть 1 км. Это верно для оси Север / Юг, но для долгот расстояние меняется в зависимости от того, на какой широте я нахожусь. Я прилагаю два снимка экрана, чтобы наглядно представить проблему, где координаты km_lat, km_lon представлены черными кружками в центре многоугольников площадью 1 км.
Как я могу это исправить?