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   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM