地理位置有时非常准确,但有时非常错误
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) 中未获得位置准确性