1 计算两点之间的距离
基于两点的经纬度计算两点之间的距离(米)
def calculate_distance(jing1, wei1, jing2, wei2):
lng1, lat1, lng2, lat2 = map(radians, [jing1, wei1, jing2, wei2]) # 经纬度转换成弧度
dlon = lng2 - lng1
dlat = lat2 - lat1
a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
distance = 2 * asin(sqrt(a)) * 6371.393 * 1000 # 地球平均半径,6371.393km
return distance
2 计算一点基于另外一点方向的航向角,以北为基准
############################################## 点B基于点A的方向,以北为基准 ############################################
def get_angle(lonA, latA, lonB, latB):
"""
参数:
点A (lonA, latA)
点B (lonB, latB)
返回:
点B基于点A的方向,以北为基准,顺时针方向的角度,0~360度
"""
radLatA = radians(latA)
radLonA = radians(lonA)
radLatB = radians(latB)
radLonB = radians(lonB)
dLon = radLonB - radLonA
y = sin(dLon) * cos(radLatB)
x = cos(radLatA) * sin(radLatB) - sin(radLatA) * cos(radLatB) * cos(dLon)
angle = degrees(atan2(y, x))
angle = (angle + 360) % 360
return angle