地理位置有时非常准确,但有时非常错误

Posted

技术标签:

【中文标题】地理位置有时非常准确,但有时非常错误【英文标题】:Geolocation highly accurate at times but very wrong at other times 【发布时间】:2018-02-24 14:46:36 【问题描述】:

我正在使用 Ionic 和地理位置来获取用户坐标。我发现它要么真的准确,要么根本不准确.. 偏离 10 公里或 30 米..

第一张图片是不准确的结果:

第一行经纬度是用户位置,第二行是地标的纬度/经度。低于该值的值是彼此相距米。

从第一组中可以看出,地理定位认为我距离这个地标有 11 公里,尽管我只有 1 公里。

这是一张具有准确结果的不同图片:

好多了,使用 ionic coords.accuracy 返回 30 米以外的准确的,但类似 ​​47000 的不准确的。对于这两个测试,我处于完全相同的位置。坐标似乎每 10-20 分钟随机变化一次..

这是我的代码:

  let userLocation = lat: 0, lng: 0

  this.geolocation.getCurrentPosition(enableHighAccuracy: true).then((resp) => 
     userLocation.lat = resp.coords.latitude;
     userLocation.lng = resp.coords.longitude;
     console.log(resp.coords.accuracy)
  ).catch((error) => 
    console.log('Error getting location', error);
  );

  getDistance(userLocation, lat: 35.904912, lng: -79.046913) //calling the function that returns the distance between each point in meters

  var rad = function(x) 
    return x * Math.PI / 180;
  ;

  var getDistance = function(p1, p2) 
    var R = 6378137; // Earth’s mean radius in meter
    var dLat = rad(p2.lat - p1.lat);
    var dLong = rad(p2.lng - p1.lng);
    var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
      Math.cos(rad(p1.lat)) * Math.cos(rad(p2.lat)) *
      Math.sin(dLong / 2) * Math.sin(dLong / 2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    var d = R * c;
    return d; // returns the distance in meter
  ;

有没有办法让这个更准确?或者更确切地说,只显示准确的?地理位置似乎每隔几分钟就会随机变化..

【问题讨论】:

【参考方案1】:

您可以检查地理定位读数附带的“准确度”值。它以米为单位,即给予或接受。 IOW 在 lat/lng 周围画一个圆,半径为“accuracy”,你就在圆的某个地方。

如果它是一个新的 wifi 点或电话塔,或者您在里面,那么准确度将低于您在外面使用 GPS 的情况。例如,如果某个读数的准确度是您之前收到的最准确读数的 2 倍,您可以随意丢弃该读数。

我所做的Here 非常相似,但如果我有一段时间没有进行有效的 GPS 更新,我也会将 mostAccurate 设置回高值。

【讨论】:

以上是关于地理位置有时非常准确,但有时非常错误的主要内容,如果未能解决你的问题,请参考以下文章

CLLocationManager 在蜂窝网络 (3G) 中未获得位置准确性

地理位置点android和准确性

CL位置高程精度

如何通过 GPS_PROVIDER 获得更高的准确性

如何使用 FusedLocationProviderClient 获取准确的位置(纬度和经度)

从 mapView 中检索当前用户位置,而地图不在屏幕上