我创建了一个演示 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);
}
它作为success
PhoneGap 的回调传递navigator.geolocation.watchPosition
。
函数触发,整个位置对象被写入控制台,仅此而已。如果var coords = position.coords;
和之间的var geoText = 'Longitude is ' + coords.longitude + '.';
行没有被注释,函数执行在两者之间的某个地方终止,行$('#positionText').html(geoText);
没有被执行并且positionText
div 没有被正确更新。
如果我注释掉这七个“舍入”行,一切都很好,并且 div 正在更新。在加速度和指南针对象的情况下,相同的舍入就像一个魅力,这使得这更加奇怪。
有人可以告诉我,我错过了什么吗?为什么 PhoneGap 地理定位对象不喜欢四舍五入,而指南针和加速度对象却可以很好地适应这个?