python实现两个经纬度点之间的距离和方位角

from:http://blog.csdn.net/zhuqiuhui/article/details/53180395

1.  求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB)(很多博客写的不是很好,这里总结一下)

    def getDegree(latA, lonA, latB, lonB):  
        """ 
        Args: 
            point p1(latA, lonA) 
            point p2(latB, lonB) 
        Returns: 
            bearing between the two GPS points, 
            default: the basis of heading direction is north 
        """  
        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)  
        brng = degrees(atan2(y, x))  
        brng = (brng + 360) % 360  
        return brng  

 2.  求两个经纬点的距离函数:P0(latA, lonA), P1(latB, lonB)  

def haversine(a, b): # 经度1,纬度1,经度2,纬度2 (十进制度数)  
    """ 
    Calculate the great circle distance between two points  
    on the earth (specified in decimal degrees) 
    """  
    lat1 = a[0][0]
    lon1 = a[1][0]
    lat2 = b[0][0]
    lon2 = b[1][0]
  
    # 将十进制度数转化为弧度  
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])  
  
    # haversine公式  
    dlon = lon2 - lon1   
    dlat = lat2 - lat1   
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2  
    c = 2 * asin(sqrt(a))   
    r = 6371 # 地球平均半径,单位为公里  
    return c * r * 1000   

 

转载于:https://www.cnblogs.com/lindaxin/p/8057999.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值