使用GPS在Phonegap中进行地理定位

时间:2015-05-18 11:01:20

标签: cordova gps geolocation

我正在使用phonegap应用程序中的地理位置。当高精度和省电模式开启时,我很容易获得位置。但它在GPS工作时会出错。请帮忙。我被困在里面。

我将超时应用到60000毫秒。但它即使在那时也没有用。

代码是 -

function Geolocation(){}

Geolocation.options = {
    maximumAge: 60000, 
    timeout: 15000, 
    enableHighAccuracy: true
};

Geolocation.errorMessage = 'Unable to get location data. Ensure that the location services are enabled in high accuracy mode. If enabled, try turning off/on location services and open this page again';

Geolocation.update = function() {
        navigator.geolocation.getCurrentPosition(Geolocation.updateSuccess, Geolocation.highAccuracyError, Geolocation.options);
}

Geolocation.highAccuracyError = function(err) {
    if (err.code == 3) {
        var options = Geolocation.options;
        options.enableHighAccuracy = false;
        options.timeout = 15000;

        navigator.geolocation.getCurrentPosition(Geolocation.updateSuccess, Geolocation.lowAccuracyError, options);
    }
}

Geolocation.lowAccuracyError = function(err) {
    Geolocation.currentLocation = null;
}

Geolocation.updateSuccess = function(position) {
    Geolocation.currentLocation = {};
    Geolocation.currentLocation.latitude = position.coords.latitude;
    Geolocation.currentLocation.longitude = position.coords.longitude;
}

提前致谢

3 个答案:

答案 0 :(得分:1)

@megha, GPS有两个问题。

1)在Android上,您必须开启所有位置服务,包括GPS卫星,Google的位置服务和快速GPS。否则,您将收到该超时错误。

我认为谷歌是故意破坏它的。它不像那样。

2)当使用GPS时,必须处于运动中 - 走动至少20英尺(即使它是一个圆圈),而你必须至少3颗卫星的现场线。大多数人通过在开放区域 - 例如足球场或停车场来解决这个最后的问题。

杰西

答案 1 :(得分:0)

您应该尝试使用watchPosition()代替getCurrentPosition()

getCurrentPosition()在当前时间点对设备位置发出单一请求,因此位置超时可能会在设备上的GPS硬件有机会获得定位之前发生。

我建议使用watchPosition()来设置观察程序,每当操作系统从GPS硬件接收位置更新时,它将调用成功函数。

因此,根据您当前的代码,例如:

function Geolocation(){}

Geolocation.watchID;
Geolocation.minAccuracyInMetres = 50;

Geolocation.options = {
    maximumAge: 60000, 
    timeout: 15000, 
    enableHighAccuracy: true
};

Geolocation.errorMessage = 'Unable to get location data. Ensure that the location services are enabled in high accuracy mode. If enabled, try turning off/on location services and open this page again';

Geolocation.update = function() {
        Geolocation.watchID = navigator.geolocation.watchPosition(Geolocation.updateSuccess, Geolocation.highAccuracyError, Geolocation.options);
}

Geolocation.highAccuracyError = function(err) {
    if (err.code == 3) {
        var options = Geolocation.options;
        options.enableHighAccuracy = false;
        options.timeout = 15000;

        navigator.geolocation.getCurrentPosition(Geolocation.updateSuccess, Geolocation.lowAccuracyError, options);
    }
}

Geolocation.lowAccuracyError = function(err) {
    Geolocation.currentLocation = null;
}

Geolocation.updateSuccess = function(position) {
    // Reject if accuracy is not sufficient
    if(position.coords.accuracy > Geolocation.minAccuracyInMetres){
      return;        
    }

    // If only single position is required, clear watcher
    navigator.geolocation.clearWatch(Geolocation.watchID);

    Geolocation.currentLocation = {};
    Geolocation.currentLocation.latitude = position.coords.latitude;
    Geolocation.currentLocation.longitude = position.coords.longitude;
}

答案 2 :(得分:0)

完全有可能您的手机根本无法获得基于GPS硬件的位置。例如,如果您在地下,您的手机将无法连接到GPS卫星。你并不需要在地下这样做。根据您的说法,我认为Cordova正确地向您报告手机无法确定其位置。