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   

 

posted @ 2017-12-18 15:48  深度学习1  阅读(4210)  评论(0编辑  收藏  举报