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

Posted 深度学习1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 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实现两个经纬度点之间的距离和方位角的主要内容,如果未能解决你的问题,请参考以下文章

计算两个纬度坐标之间的距离/方位

给定(纬度,经度)点,距离和方位,如何获得新的经纬度

点之间的笛卡尔XY轴承.Net

如何两个WGS84坐标之间计算方位角(角向北)

给定初始纬度 lng,距离和方位角,在 php 中查找纬度经度点

已知一点经纬度和距离,方位角;求另外一点的经纬度