html5-geolocation : navigator.geolocation.watchPosition 连续回调

Posted

技术标签:

【中文标题】html5-geolocation : navigator.geolocation.watchPosition 连续回调【英文标题】:html5-geolocation : navigator.geolocation.watchPosition continuous callbacks 【发布时间】:2011-06-15 20:59:01 【问题描述】:

我正在使用 html5 地理定位 API。我最近决定从轮询用户位置转移到 使用 watchPosition 方法,该方法应该在设备位置发生变化时触发其“成功”功能。

但相反,它一遍又一遍地用相同的位置填充我的数据库。相关代码贴在下面:

updateLocation = navigator.geolocation.watchPosition(success, failed, enableHighAccuracy:true, maximumAge:30000, timeout:27000);

function success()
showGPS(position);


function showGPS(position) 
    var lng = position.coords.longitude;
    var lat = position.coords.latitude;
    gpsText.innerText = "Latitude: "+ lat +"\nLongitude: "+ lng + "\nAccuracy: "+    position.coords.accuracy + "\nSpeed:" + (position.coords.speed*3.6) + "\nAltitude:" + position.coords.altitude;
    getData("http://databaseEntryURL/gpsReceiver.aspx?string=" + gpsText.innerText);

getData 大约每秒被调用 5 次。我确定 latlng 没有改变。我正在使用 android 2.2 来加载此页面。仅当设备位置发生变化时,如何使其调用成功函数?

【问题讨论】:

【参考方案1】:

可能只是某个bug引起的,所以即使位置没有变化(或者变化很小),你的回调仍然会被触发。

解决它的一种方法是存储最后一个位置并使用它与当前位置进行比较。如果没有变化(或者变化太小),在回调中什么也不做。这将为您节省带宽和数据库空间。

如果您需要为手机节省电池寿命,则需要优化选项,例如将enableHighAccuracy 更改为false

【讨论】:

@anirudh4444 - 我不认为这是一个 错误,我认为当与位置相关的任何数据发生变化时触发回调,即 lat/lng/accuracy/altitude 等. 某些浏览器存在问题,而其他浏览器则没有。请检查 ios 和 Android 2.3。【参考方案2】:

更有效的方法是将watchPosition 设置为变量,并在收到第一个响应后调用clearWatch()

var watchID = navigator.geolocation.watchPosition(onSuccess, onFailed);
function onSuccess(position) 
    navigator.geolocation.clearWatch(watchID);
;

【讨论】:

当时,我不想停止接收更新。一旦调用了clearWatch(),当位置发生变化时,我根本不会得到更新,并且必须使用setTimeOut() 进行轮询。

以上是关于html5-geolocation : navigator.geolocation.watchPosition 连续回调的主要内容,如果未能解决你的问题,请参考以下文章

HTML 5 - 地理位置:position.coords.speed 永远不会回到零

React Navigation V2:navigation.push 和 navigation.navigate 的区别

如何从 stack.navigation 外部的组件中使用 navigation.navigate

navigation.navigate('Home') 在打字稿中显示一些错误

React Native - navigation.navigate 不工作

找不到 androidx.navigation:navigation-compose: