Haversine formula in Python (bearing and distance between two GPS points)
Формула Haversine на Python (азимут и расстояние между двумя точками GPS)
Проблема
Я хотел бы знать, как получить расстояние и азимут между двумя точками GPS.
Я исследовал расстояние хаверсайна. Кто-то сказал мне, что я также могу найти азимут, используя те же данные.
Все работает нормально, но азимут пока работает не совсем правильно. Азимут выдает отрицательный результат, но он должен быть в диапазоне от 0 до 360 градусов.
Установленные данные должны составлять горизонтальный азимут 96.02166666666666 и равны:
Start point: 53.32055555555556, -1.7297222222222221 Bearing: 96.02166666666666 Distance: 2 km Destination point: 53.31861111111111, -1.6997222222222223 Final bearing: 96.04555555555555
print"The degree of vertical angle is: " print c print"--------------------" print"The distance between the Balloon GPS and the Antenna GPS is: " print distance print"--------------------"
Переведено автоматически
Ответ 1
Вот версия для Python:
from math import radians, cos, sin, asin, sqrt
defhaversine(lon1, lat1, lon2, lat2): """ Calculate the great circle distance in kilometers between two points on the earth (specified in decimal degrees) """ # convert decimal degrees to radians lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2 c = 2 * asin(sqrt(a)) r = 6371# Radius of earth in kilometers. Use 3956 for miles. Determines return value units. return c * r
Ответ 2
Большинство этих ответов "округляют" радиус земли. Если вы проверите их с помощью других калькуляторов расстояний (таких как geopy), эти функции будут отключены.
Это хорошо работает:
from math import radians, cos, sin, asin, sqrt
defhaversine(lat1, lon1, lat2, lon2):
R = 3959.87433# this is in miles. For Earth radius in kilometers use 6372.8 km