使用watchPosition或getCurrentPosition的phoneGap应用程序中的最短更新时间?

时间:2013-09-30 16:41:21

标签: iphone cordova geolocation gps

我在更新GPS位置时遇到一些麻烦,我需要每100ms更新一次位置。在我的解决方案中,我观察到GPS位置将每秒更新而不是更快:( 我尝试使用setInterval:

function localize(){


    if(navigator.geolocation)
    {


        navigator.geolocation.getCurrentPosition(function(position){

                                                 var element = document.getElementById('geolocation');
                                                 element.innerHTML = 'Latitude: '          + position.coords.latitude         + '<br />' +
                                                 'Longitude: '         + position.coords.longitude        + '<br />' +
                                                 'Altitude: '          + position.coords.altitude         + '<br />' +
                                                 'Accuracy: '          + position.coords.accuracy         + '<br />' +
                                                 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '<br />' +
                                                 'Heading: '           + position.coords.heading          + '<br />' +
                                                 'Speed: '             + position.coords.speed            + '<br />' +
                                                 'Timestamp: '         + position.timestamp               + '<br />';
                                                 },function(error){
                                                 alert('code: '    + error.code    + '\n' +
                                                       'message: ' + error.message + '\n');
                                                 }, { maximumAge:100, timeout:100, enableHighAccuracy:true  });

    }else{
        handleNoGeolocation(false);
    }

}
localize();
setInterval(localize, 100);
}

with setTimeout:

localize();
function localize(){


    if(navigator.geolocation)
    {


        navigator.geolocation.getCurrentPosition(function(position){

                                                 var element = document.getElementById('geolocation');
                                                 element.innerHTML = 'Latitude: '          + position.coords.latitude         + '<br />' +
                                                 'Longitude: '         + position.coords.longitude        + '<br />' +
                                                 'Altitude: '          + position.coords.altitude         + '<br />' +
                                                 'Accuracy: '          + position.coords.accuracy         + '<br />' +
                                                 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '<br />' +
                                                 'Heading: '           + position.coords.heading          + '<br />' +
                                                 'Speed: '             + position.coords.speed            + '<br />' +
                                                 'Timestamp: '         + position.timestamp               + '<br />';
                                                 },function(error){
                                                 alert('code: '    + error.code    + '\n' +
                                                       'message: ' + error.message + '\n');
                                                 }, { maximumAge:100, timeout:100, enableHighAccuracy:true  });
        setTimeout(localize, 100);
    }else{
        handleNoGeolocation(false);
    }

}

setInterval(localize, 100);
}

或whatchPosition:

localize();
function localize(){


    if(navigator.geolocation)
    {


        navigator.geolocation.watchPosition(function(position){

                                                 var element = document.getElementById('geolocation');
                                                 element.innerHTML = 'Latitude: '          + position.coords.latitude         + '<br />' +
                                                 'Longitude: '         + position.coords.longitude        + '<br />' +
                                                 'Altitude: '          + position.coords.altitude         + '<br />' +
                                                 'Accuracy: '          + position.coords.accuracy         + '<br />' +
                                                 'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '<br />' +
                                                 'Heading: '           + position.coords.heading          + '<br />' +
                                                 'Speed: '             + position.coords.speed            + '<br />' +
                                                 'Timestamp: '         + position.timestamp               + '<br />';
                                                 },function(error){
                                                 alert('code: '    + error.code    + '\n' +
                                                       'message: ' + error.message + '\n');
                                                 }, { maximumAge:100, timeout:100, enableHighAccuracy:true  });
        setTimeout(localize, 100); //with or without
    }else{
        handleNoGeolocation(false);
    }

}


}

我尝试过使用或不使用maximumAge和timeout选项。 我的设备是iPhone 5。

2 个答案:

答案 0 :(得分:0)

消费者手机中的GPS设备每秒更新一次不超过一次。 无论你做什么,都不会有100毫秒的间隔。

所以改变你的算法(插值)以使用1秒。

答案 1 :(得分:0)

是Gps无法发送最多1秒的更新。 我在Cordova制作的Android项目中发现了这一点。我想这可以帮到你。也许在IOS项目中它是一回事?

我刚刚发现了Cordova / PhoneGap中的一个主要问题: - 当您打开由cordova构建的Android项目时(在命令行中),requestUpdate设置为..... 60秒!!!!!!!!! !每分钟都有一个新的位置!即使你使用GPS(enableHighAccuracy =“true”)。因此,尝试将其设置为1000,在org.apache.cordova.geolocation包中找到LocationManager.GPS_PROVIDER - &gt; GPSListener课程!

可可