在获得准确结果之前,如何让 Geolocation watchPosition 运行?
Posted
技术标签:
【中文标题】在获得准确结果之前,如何让 Geolocation watchPosition 运行?【英文标题】:How do I get Geolocation watchPosition to run until I get an accurate result? 【发布时间】:2016-10-11 21:43:57 【问题描述】:我一直在使用地理定位navigator.geolocation.getCurrentPosition
,但发现它不如navigator.geolocation.watchPosition
准确。所以我的想法是让navigator.geolocation.watchPosition
运行,直到它得到<=100
的准确度,然后显示位置,如果在15秒内失败则显示错误。
这是我得到的:
function getLocation()
if (navigator.geolocation)
var geo_options =
enableHighAccuracy: true,
timeout: 15000,
maximumAge: 0
;
var watchID = navigator.geolocation.watchPosition(
showPosition,
showError,
geo_options
);
else
// Error here. Geolocation disabled.
function showPosition(position)
if (position.coords.accuracy > 100)
// Keep trying
else
// Fire up the map, we got a position!
// Clear the watchID.
navigator.geolocation.clearWatch(watchID);
我的问题是由于某种原因我无法清除成功的 watchID,因为它说它是未定义的。我猜那是因为函数在外面。
是否有一种简单的方法可以做到这一点,以便仅在准确度低于 100 时触发showPosition
?现在showPosition
随时被触发,因为它在watchPosition
函数内。
【问题讨论】:
【参考方案1】:那是因为watchID
是 undefined
。您已经在getLocation
的范围内定义了它,它不与showPosition
共享其范围。尝试在它们之外声明它。
var watchID;
function getLocation()
...
watchID = navigator.geolocation.watchPosition(showPosition, showError, geo_options);
function showPosition(position)
if (position.coords.accuracy <= 100)
navigator.geolocation.clearWatch(watchID);
专业提示:如果您的代码在 strict mode 中运行,它会提醒您注意此错误。
'use strict';
function declareX()
var x = 1;
function useX()
console.log(x);
declareX();
useX();
【讨论】:
以上是关于在获得准确结果之前,如何让 Geolocation watchPosition 运行?的主要内容,如果未能解决你的问题,请参考以下文章
Google Maps Geolocation API 准确性