根据经纬度计算球面距离

在做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 到 +90
  • Longitude的范围:-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;
}

还原成公式为:

拓展信息:

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

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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值