【发布时间】:2018-07-16 14:43:45
【问题描述】:
我正在使用navigator.geolocation.getCurrentPosition() 在移动应用中获取当前位置。
一开始它会正确获取当前位置。
我每秒调用一次函数以保持位置值(纬度、经度)的更新。
但每次我调用该函数时,它都会返回相同的值,而 timestamp 也没有改变。
有什么想法吗?
【问题讨论】:
我正在使用navigator.geolocation.getCurrentPosition() 在移动应用中获取当前位置。
一开始它会正确获取当前位置。
我每秒调用一次函数以保持位置值(纬度、经度)的更新。
但每次我调用该函数时,它都会返回相同的值,而 timestamp 也没有改变。
有什么想法吗?
【问题讨论】:
您应该考虑使用参数“maximumAge”并将其设置为 0 以避免获取缓存值。例如
navigator.geolocation.getCurrentPosition(position => {
region: {
latitude: position.coords.latitude,
longitude: position.coords.longitude
}
}, err => {
console.log(err)
alert('fetching the position failed')
}, {enableHighAccuracy: false, timeout: 20000, maximumAge: 0})
PositionOptions.maximumAge 属性是一个正长值,指示可接受返回的可能缓存位置的最大年龄(以毫秒为单位)。如果设置为 0,则意味着设备不能使用缓存的位置,必须尝试检索真实的当前位置。如果设置为 Infinity,则设备必须返回缓存的位置,无论其年龄如何。
【讨论】:
您可以将其他选项传递给 getCurrentPosition() 。
支持的选项是timeout (ms), maximumAge (ms), enableHighAccuracy (bool)。
在这里您可以看到 maximumAge 选项。如果在 maximumAge 限制内有缓存的位置,它将返回缓存的位置数据。您可以将其设置为 0,这样它就不会返回任何缓存数据,而是在您每次发出位置请求时读取并返回位置数据。
我也不确定你是否会每秒更新一次位置,这是一个异步任务,有时完成整个request > read location > send back response 过程的时间超过一秒。您也必须牢记这一点。
【讨论】: