手机浏览器上的三角测量位置与GPS

时间:2014-07-14 21:56:55

标签: javascript html5 gps geolocation location

我正在尝试编写一个从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).

1 个答案:

答案 0 :(得分:0)

这取决于您在enableHighAccuracy选项中的选择,具体取决于手机的浏览器实施。

https://developer.mozilla.org/en-US/docs/Web/API/PositionOptions.enableHighAccuracy

不同的实施解释"高精度"以不同的方式。它只是意味着即使需要牺牲电池并且需要很长时间,浏览器也会尝试获得高精度。没有足够高的高度不是由你决定的。您无法控制GPS或Wi-Fi /蜂窝三角测量。实现决定了你。

获取地理位置始终会耗费电池寿命。如果watchPosition费用太高,您可以考虑将getCurrentPosition与您自己的策略一起使用。