python实现两个经纬度点之间的距离和方位角的方法
最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流!
1.求两个经纬点的方位角,P0(latA,lonA),P1(latB,lonB)(很多博客写的不是很好,这里总结一下)
defgetDegree(latA,lonA,latB,lonB): """ Args: pointp1(latA,lonA) pointp2(latB,lonB) Returns: bearingbetweenthetwoGPSpoints, default:thebasisofheadingdirectionisnorth """ 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 returnbrng
2.求两个经纬点的距离函数:P0(latA,lonA),P1(latB,lonB)
defgetDistance(latA,lonA,latB,lonB): ra=6378140#radiusofequator:meter rb=6356755#radiusofpolar:meter flatten=(ra-rb)/ra#Partialrateoftheearth #changeangletoradians 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) returndistance
以上这篇python实现两个经纬度点之间的距离和方位角的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。