我正在构建一个需要用户精确定位GPS的应用程序。现在我正在使用:
navigator.geolocation.getCurrentPosition(geolocationSuccess,geolocationError,
{ maximumAge: 60000, timeout:8000 , enableHighAccuracy: true } );
然而,在运行应用时,我有时会或position.coords.accuracy
获得值29000
的{{1}}。这是不可接受的。如何强制降低(更准确)GPS位置?
它发生在iOS和Android上。
注意我使用
<gap:plugin name="cordova-plugin-geolocation" source="npm" />
答案 0 :(得分:2)
可以达到最佳准确度:
maximumAge
。timeout
取决于你的应用程序的使用方式(它是主要用于汽车的“navi-app”还是“jogger-app”主要用于徒步?)。基本规则:设置的timeout
越高,您授予hardware-gps-chip请求准确坐标的时间就越长。enableHighAccuracy
也必须设置为true
。 让我在(稍微)更多细节中解释上述几点。
当您将maximumAge
设置为0
(零)时,您永远不会获得“实时”-gps坐标(未缓存),因为即使是最准确的坐标也已达到一定年龄。这实际上取决于您的应用需求,这会将我带到timeout
。
我将超时设置为5秒,因为我使用的大多数现代设备都可以获得0.5-3秒之间的坐标。它取决于你的应用程序的移动速度(汽车,徒步)。移动应用程序的速度越快,设置的timeout
越少,否则应用程序可能会得到太不准确的坐标。另一方面,timeout
不能设置为0
,因为每次都会立即取消请求,而您永远不会获得“实时”-gps坐标。
您也可以在github上制作自己的插件或分叉项目,以便更好地控制:
LocationManager.GPS_PROVIDER
)。因为即使你将enableHighAccuracy
设置为true
也无法保证gps-hardware-chip真正被使用,所以你只能告诉这个插件使用(如果可能的话)gps-卫星并强烈依赖环境条件,这使我进入下一段。请注意:由于恶劣的环境条件(街道峡谷,强烈的云量等),并不总是可以请求最准确的坐标。是否要求您的应用程序必须随时随地获取坐标?然后你必须放松你的准确性要求。
最后但并非最不重要的是,在成功请求之后,您始终可以检查坐标的准确性属性,该属性不得超过某个阈值(取决于应用程序要求),如果确实如此,则会另外发出请求例如:
var threshold = "APP-ACCURANCY-REQUIREMENT-NUMBER-HERE";
function requestLocation(callback) {
navigator.geolocation.getCurrentPosition(
function (position) {
console.log(position);
// Does this position fulfill the ACCURANCY-REQUIREMENT of your app? IF SO THEN STOP REQUESTING OTHERWISE REQUEST AGAIN
if (position.coords.accuracy < threshold) callback(position);
else requestLocation(callback);
},
function (err) {
console.log(err);
},
{
maximumAge: 60000,// IS A 1-MINUTE-COORDINATE TOO OLD WHILE DRIVING BY CAR? 130KM/hour -> 36 M/sec
timeout: 8000 ,// IS A WAITING-TIME OF 8 SECONDS TOO LONG WHILE DRIVING BY CAR?
enableHighAccuracy: true // YES, THIS ATTRIBUTE MUST BE SET TO TRUE
}
);
}
requestLocation(function (position) {
// position that has got an accuracy less than ACCURANCY-REQUIREMENT
console.log('request accurate position', position);
});
希望这个“故事”能帮助你,祝你好运!