博主搞了半天haversin公式倒腾距离之后,发现有现成的geopy可用,且网上查到的一些函数用法似乎有改变,遂整理如下
已知两点经纬度求距离
from geopy.distance import geodesic
nodes = [(-22.8981672 -43.2219277),(-22.8835229 -43.2631313)]
#以千米为单位求两点之间距离
distance = geodesic(nodes[0],nodes[1]).kilometers
print('两点之间距离:',distance)
注意以上geodesic是geopy2.0版本的用法,在1.19版本中使用时为VincentyDistance
已知两点经纬度求方向角(方向角:与正北顺时针夹角)
from math import sin, cos, atan2, pi
#计算方向角
def calcu_azimuth(lat1, lon1, lat2, lon2):
lat1_rad = lat1 * pi / 180
lon1_rad = lon1 * pi / 180
lat2_rad = lat2 * pi / 180
lon2_rad = lon2 * pi / 180
y = sin(lon2_rad - lon1_rad) * cos(lat2_rad)
x = cos(lat1_rad) * sin(lat2_rad) - sin(lat1_rad) * cos(lat2_rad) * cos(lon2_rad - lon1_rad)
brng = atan2(y, x) / pi * 180
return float((brng + 360.0) % 360.0)
已知一点经纬度、方向角、目标距离