Замените ваш код настройки arg на:
lat1, lon1 = p1
lat2, lon2 = p2
assert -90 <= lat1 <= 90
assert -90 <= lat2 <= 90
assert -180 <= lon1 <= 180
assert -180 <= lon2 <= 180
lat1, lon1, lat2, lon2 = map(math.radians, (lat1, lon1, lat2, lon2))
и снова запустите ваш код.
Обновите Несколько общих рекомендаций о вычислениях, связанных с широтой/ долгота:
- Входной широта / долгота в градусах или радианах?
- Проверить входной широта / долгота для допустимого диапазона
- Проверить ВЫХОДНОЙ широта / долгота для действительного диапазона.Долгота имеет разрыв на международной линии времени.
Последнюю часть процедуры средней точки можно было бы с пользой изменить, чтобы избежать потенциальной проблемы при использовании на дальние расстояния:
lon3 = lon1 + math.atan2(dy, math.cos(lat1) + dx)
# replacement code follows:
lon3d = math.degrees(lon3)
if lon3d < -180:
print "oops1", lon3d
lon3d += 360
elif lon3d > 180:
print "oops2", lon3d
lon3d -= 360
return(math.degrees(lat3), lon3d)
ДляНапример, нахождение средней точки между Оклендом, Новая Зеландия (-36,9, 174,8) и Папеэте, Таити (-17,5, -149,5) дает oops2 194.270430902
на пути к правильному ответу (-28.355951246746923, -165.72956909809082)