两个常用的工具方法:根据两个点的经纬度计算距离和航向角

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值