首页 > 编程知识 正文

根据经纬度计算球面距离的公式,不同经度不同纬度的球面距离

时间:2023-05-05 10:39:46 阅读:187731 作者:1187

在做LBS的应用的时候考虑到了这样一个问题,经纬度后面的小数的位数对于精度影响有多少?

通过百度或者Google,可以获得如下信息:

在纬度相等的情况下:

经度每隔0.00001度,距离相差约1米;经度每隔0.0001度,距离相差约10米;经度每隔0.001度,距离相差约100米;经度每隔0.01度,距离相差约1000米;经度每隔0.1度,距离相差约10000米。

在经度相等的情况下:

纬度每隔0.00001度,距离相差约1.1米;纬度每隔0.0001度,距离相差约11米;纬度每隔0.001度,距离相差约111米;纬度每隔0.01度,距离相差约1113米;纬度每隔0.1度,距离相差约11132米。

但是上诉的答案是否是正确的呢?我们先来了解下地球的一些基本信息:

地球的赤道半径 = 6378.1 公里地球的极半径 = 6356.8 公里Latitude的范围是:-90 到 +90Longitude的范围:-180 到 +180地球参考球体的周长:40075016.68米

经纬度划分规则如下图:

从上述的图片中可以看到,经度和纬度的划分规则是不一样的。所以网上搜索的经纬度经度对于精度的影响并不正确的。

纬度每格1度影响的距离 = 极半径*π/180=110.95 km

经度每隔1度影响的距离(赤道)= 赤道半径*π/180 = 111.32 km,维度越靠近南北极,影响的距离越小。

如何计算经纬度之间的距离?

基于球面模型的地理空间距离计算公式。

该模型将地球看成圆球,假设地球上有A(ja,wa),B(jb,wb)两点(注:ja和jb分别是A和B的经度,wa和wb分别是A和B的纬度),A和B两点的球面距离就是AB的弧长,AB弧长=R*角AOB(注:角AOB是A跟B的夹角,O是地球的球心,R是地球半径,约为6367000米)。如何求出角AOB呢?可以先求AOB的最大边AB的长度,再根据余弦定律可以求夹角。

如何求出AB长度呢?

google maps脚本中的计算距离代码:

privateconstdoubleEARTH_RADIUS=6378.137;privatestaticdoublerad(doubled){ returnd *Math.PI/180.0;}publicstaticdoubleGetDistance(doublelat1,doublelng1,doublelat2,doublelng2){ doubleradLat1=rad(lat1); doubleradLat2=rad(lat2); doublea=radLat1-radLat2; doubleb=rad(lng1)-rad(lng2); doubles=2*Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2)+ Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2))); s=s *EARTH_RADIUS; s=Math.Round(s *10000)/10000; returns;}

还原成公式为:

拓展信息:

地球其实不是圆的,当然也不是平的,地球虽是个球体,但是由于受到自转时的惯性及radxgz的作用,他并非完美的圆形。所以地球最高点并不是珠穆朗玛峰,虽然其海拔有8848米,由于地球不是完美的球型,所以赤道附近的山峰其实离星空更近一些,因此地球最高点理论上是厄瓜多尔博拉索山(Mount Chimborazo),它的海拔虽然有6272米,却比珠峰”高“出2400米。

转自: https://www.biaodianfu.com/lbs-precision.html?utm_source=tuicool&utm_medium=referral

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。