两个常用的工具方法:根据两个点的经纬度计算距离和航向角
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