我正在创建一个浏览器应用程序,其中一个功能是将用户放置在地图上,然后在周围区域搜索附近的"事物。"重要(并且要求)我尽可能准确,因为附近的位置对用户显示的内容有很大的不同。
为了将这个人放在地图上,我写了下面的代码(还有一些,但是我把这部分留下了)。但是,在每种情况下,我都会看到从我的位置到最远几百米的精确度范围。对于原因,似乎没有任何押韵或理由。
我在测量时在外面。我与任何WiFi断开连接(但我的WiFi已启用)。我在Safari和Chrome上测试iOS设备,我正在测试Chrome上的Android设备。所有设备的结果都相似。
我注意到的一件事是我看到手机正在向位置发出请求。我看到GPS符号在我的Android设备上显示(简要)。我可以看到Safari和Chrome已在Apple位置设置中发出最近的位置请求。此外,当我将用户导航到该位置(分为Google地图或Apple地图等应用)时,位置非常准确并立即找到。
我在这里做错了吗?我能做些什么来提高准确度吗?
// Attempt to get low-accuracy location if high cannot be retrieved.
function handleLocationError_high(error) {
if(error.code == error.TIMEOUT) {
// Attempt low accuracy if a timeout occurs.
navigator.geolocation.getCurrentPosition(
locationSuccessCallback,
handleLocationError_low,
{timeout: 10000, maximumAge: 0, enableHighAccuracy: false});
} else {
handleLocationError_low(error);
}
}
// Handle the error if location cannot be retrieved at all.
function handleLocationError_low(error) {
console.log('No location found!');
}
// Geolocation callback if there is success in getting the golocation (high or low accuracy).
function locationSuccessCallback(position) {
var pos = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
// ...place the user on the map.
}
// Try HTML5 geolocation.
// Test for support of geolocation. If it is not supported, error.
// Next, attempt to get high accuracy (GPS) position. If that times out, get the low accuracy position.
if(!navigator.geolocation) {
handleLocationError_low();
return;
}
navigator.geolocation.getCurrentPosition(
locationSuccessCallback,
handleLocationError_high,
{timeout: 5000, maximumAge: 0, enableHighAccuracy: true});