使用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
我现在挣扎了一天,找不到任何有相同问题的人,可能会因为寻找太长时间而失明? 有人帮忙吗?
非常感谢,S。
答案 0 :(得分: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" />
还要检查您的设备是否支持地理位置
答案 1 :(得分:1)
在PhoneGap的文档中,获取位置更新的语句定义如下。
navigator.geolocation.getCurrentPosition(onSuccess, onError);
所以有成功和错误的情况。但是你为这两种情况调用相同的方法。因此,如果您没有地理位置,则无法获得纬度和经度值。这可能会导致错误。而不是在else语句中显示错误情况,而是定义一个错误函数,在错误情况下显示它。
答案 2 :(得分: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);
}