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