1. 程式人生 > >python實現兩個經緯度點之間的距離和方位角

python實現兩個經緯度點之間的距離和方位角

asi .net polar 經緯 div poi pytho ola 函數

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 getDistance(latA, lonA, latB, lonB):  
        ra = 6378140  # radius of equator: meter  
        rb = 6356755  # radius of polar: meter  
        flatten = (ra - rb) / ra  # Partial rate of the earth  
        # change angle to radians  
        radLatA = radians(latA)  
        radLonA = radians(lonA)  
        radLatB = radians(latB)  
        radLonB = radians(lonB)  
      
        pA = atan(rb / ra * tan(radLatA))  
        pB = atan(rb / ra * tan(radLatB))  
        x = acos(sin(pA) * sin(pB) + cos(pA) * cos(pB) * cos(radLonA - radLonB))  
        c1 = (sin(x) - x) * (sin(pA) + sin(pB))**2 / cos(x / 2)**2  
        c2 = (sin(x) + x) * (sin(pA) - sin(pB))**2 / sin(x / 2)**2  
        dr = flatten / 8 * (c1 - c2)  
        distance = ra * (x + dr)  
        return distance  

python實現兩個經緯度點之間的距離和方位角