我正在尝试编写一个从JavaScript收集用户位置的应用程序。我目前正在使用Geolocation API从笔记本电脑进行调试,并证明它可以在给定的时间内工作。它每隔几秒钟播放一次我的位置,然后在5-10秒后移动时重新计算。事实证明,由于某些原因,我使用了很多电池/ CPU。如果我在手机上使用这个应用程序,它会通过GPS播放我的位置还是从本地手机信号塔三角测量它的位置?
var latitude, longitude, accuracy, angle;
function setGeolocation(prevID) {
var geoID = window.navigator.geolocation.watchPosition(getPosition,handleErrors,{maximumAge: 1000, enableHighAccuracy: true});
//Pass the ID's to the seeMyGeoID function.
seeMyGeoID(geoID,prevID);
function getPosition(position){
latitude = position.coords.latitude;
longitude = position.coords.longitude;
accuracy = position.coords.accuracy;
angle = position.coords.heading;
console.log(latitude+" "+longitude+" "+accuracy+" "+angle);
};
function handleErrors(err){
if (err.code == 1){
console.log("PERMISSION_DENIED");
}
if (err.code == 2){
console.log("POSITION_UNAVAILABLE");
}
if (err.code == 3){
console.log("TIMEOUT");
}
};
};
function seeMyGeoID(geolocationID,previousID){
if(geolocationID != previousID){
previousID = geolocationID;
//Wait 1 second.
setTimeout(function(){
navigator.geolocation.clearWatch(previousID);
navigator.geolocation.clearWatch(previousID+1);
setGeolocation(previousID);
},1000);
}
};
//Call function for the first time.
setGeolocation(0);
//I want this code to be able to take a position every 0.5-1 second, or in real time (but that may be pushing it).
答案 0 :(得分:0)
这取决于您在enableHighAccuracy
选项中的选择,具体取决于手机的浏览器实施。
https://developer.mozilla.org/en-US/docs/Web/API/PositionOptions.enableHighAccuracy
不同的实施解释"高精度"以不同的方式。它只是意味着即使需要牺牲电池并且需要很长时间,浏览器也会尝试获得高精度。没有足够高的高度不是由你决定的。您无法控制GPS或Wi-Fi /蜂窝三角测量。实现决定了你。
获取地理位置始终会耗费电池寿命。如果watchPosition
费用太高,您可以考虑将getCurrentPosition
与您自己的策略一起使用。