我创建了一个演示PhoneGap应用程序,用于检查加速度,指南针和地理位置,并将这些信息提供给用户。应用程序是使用PhoneGap Build编译的。
我使用简单的toFixed(n)
和一些字符串来舍入值并在其后添加一些单位。这在加速和指南针的情况下工作得非常好。出于某些原因,我无法在地理定位的情况下失败(至少在Galaxy Nexus / Android 4.3上)。
我使用了这样的功能:
function onGeolocationSuccess(position)
{
console.log(position);
var coords = position.coords;
coords.latitude = coords.latitude.toFixed(6);
coords.longitude = coords.longitude.toFixed(6);
coords.altitude = coords.altitude.toFixed(2) + ' m';
coords.accuracy = coords.accuracy.toFixed(6) + ' m';
coords.altitudeAccuracy = coords.altitudeAccuracy.toFixed(2) + ' m';
coords.heading = coords.heading.toFixed(2) + '\u00b0';
coords.speed = coords.speed.toFixed(2) + ' m/s';
var geoText = 'Longitude is ' + coords.longitude + '.';
geoText = geoText + 'Latitude is ' + coords.latitude + '.';
geoText = geoText + 'Accuracy is ' + coords.accuracy + '.';
geoText = geoText + 'Altitude is ' + coords.altitude + '.';
geoText = geoText + 'Altitude Accuracy is ' + coords.altitudeAccuracy + '.';
geoText = geoText + 'Heading is ' + coords.heading + '.';
geoText = geoText + 'Speed is ' + coords.speed + '.';
$('#positionText').html(geoText);
}
传递给PhoneGap success
的{{1}}回调。
函数触发,整个位置对象被写入控制台,就是这样。如果navigator.geolocation.watchPosition
和var coords = position.coords;
之间的行未注释,则函数执行将介于两者之间,行var geoText = 'Longitude is ' + coords.longitude + '.';
未执行,$('#positionText').html(geoText);
div为没有正确更新。
如果我注释掉这七条“舍入”线,一切都很好,div正在更新。同样的圆角就像加速度和指南针对象的魅力一样,这使得它更加奇怪。
有人能告诉我,我错过了什么?为什么PhoneGap地理定位对象不喜欢舍入,而罗盘和加速度对象可以正常使用?
答案 0 :(得分:1)
您的位置对象的一部分返回null,当将toFixed()应用于这些空值时,这会杀死您的代码。以下是我如何运作:
<强> HTML 强>
<div id="positionText"></div>
<强>的Javascript 强>
function onGeolocationSuccess(position) {
var coords = {};
coords.latitude = position.coords.latitude.toFixed(6);
coords.longitude = position.coords.longitude.toFixed(6);
coords.altitude = position.coords.altitude + ' m';
coords.accuracy = position.coords.accuracy + ' m';
coords.altitudeAccuracy = position.coords.altitudeAccuracy + ' m';
coords.heading = position.coords.heading + '\u00b0';
coords.speed = position.coords.speed + ' m/s';
var geoText = 'Longitude is ' + coords.longitude + '.<br/>';
geoText += 'Latitude is ' + coords.latitude + '.<br/>';
geoText += 'Accuracy is ' + coords.accuracy + '.<br/>';
geoText += 'Altitude is ' + coords.altitude + '.<br/>';
geoText += 'Altitude Accuracy is ' + coords.altitudeAccuracy + '.<br/>';
geoText += 'Heading is ' + coords.heading + '.<br/>';
geoText += 'Speed is ' + coords.speed + '.<br/>';
$('#positionText').html(geoText);
}
function onError() {
}
navigator.geolocation.getCurrentPosition(onGeolocationSuccess, onError);