0

使用 Cord-ova 获取设备位置我在尝试使用模拟器访问位置坐标时遇到了一种奇怪的行为(也在我的 Galaxy S2 上部署了代码......同样的问题)。

 document.addEventListener( "deviceready", onDeviceReady, false);
    function onDeviceReady () {
       if (navigator.geolocation) {
          var options = { timeout: 10000, enableHighAccuracy: true, maximumAge: Infinity };
          navigator.geolocation.getCurrentPosition(locationOnSuccess, locationOnSuccess, options);
       } else {
            alert("Geoloc does not exists");
       }
    }

    var locationOnSuccess = function (pos){
       alert('Latitude: '  + pos.coords.latitude);
    }

navigator.geolocation 在触发警报时存在 这表示纬度未定义,我得到的错误是

11-13 08:44:05.296: D/CordovaLog(1861): file:///android_asset/www/index.html: Line 55 : Uncaught TypeError: Cannot read property 'latitude' of undefined
    11-13 08:44:05.296: E/Web Console(1861): Uncaught TypeError: Cannot read property 'latitude' of undefined at file:///android_asset/www/index.html:55

我现在挣扎了 1 天,找不到任何人有同样的问题,可能是因为寻找太久而失明?有人帮忙吗?

非常感谢,S。

4

3 回答 3

2

确保您已启用此功能:

(in app/res/xml/config.xml)
<feature name="Geolocation">
    <param name="android-package" value="org.apache.cordova.GeoBroker" />
</feature>


(in app/AndroidManifest.xml)
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

还要检查您的设备是否支持地理定位

于 2013-11-13T10:02:40.173 回答
1

在 PhoneGap 的文档中,获取位置更新的语句定义如下。

navigator.geolocation.getCurrentPosition(onSuccess, onError);

所以有成功和错误的情况。但是您对这两种情况都调用了相同的方法。因此,如果您没有地理位置,则无法获得纬度和经度值。这可能会导致错误。不要在 else 语句中显示错误情况,而是定义一个错误函数,在错误情况下显示这一点。

于 2013-11-13T09:16:32.653 回答
0

首先将其更改为 locationOnError

navigator.geolocation.getCurrentPosition(locationOnSuccess, locationOnError, options);

navigator.geolocation.watchPosition(coordinates);

function coordinates(p) {

        if (lastTrackedLat == null) {
            lastTrackedLat = p.coords.latitude;
        }

        if (lastTrackedLng == null) {
            lastTrackedLng = p.coords.longitude;
        }

        var lastTrackedLatlng = new google.maps.LatLng(lastTrackedLat,lastTrackedLng);

        var lat = p.coords.latitude;
        var lng = p.coords.longitude;

        var Latlng=new google.maps.LatLng(lat,lng); 
}
于 2013-11-13T09:20:18.523 回答