0

我创建了一个演示 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);
}

它作为successPhoneGap 的回调传递navigator.geolocation.watchPosition

函数触发,整个位置对象被写入控制台,仅此而已。如果var coords = position.coords;和之间的var geoText = 'Longitude is ' + coords.longitude + '.';行没有被注释,函数执行在两者之间的某个地方终止,行$('#positionText').html(geoText);没有被执行并且positionTextdiv 没有被正确更新。

如果我注释掉这七个“舍入”行,一切都很好,并且 div 正在更新。在加速度和指南针对象的情况下,相同的舍入就像一个魅力,这使得这更加奇怪。

有人可以告诉我,我错过了什么吗?为什么 PhoneGap 地理定位对象不喜欢四舍五入,而指南针和加速度对象却可以很好地适应这个?

4

1 回答 1

1

您的位置对象的一部分返回 null,当 toFixed() 应用于这些 null 值时,这会杀死您的代码。这是我如何让它工作的:

jsfiddle

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);
于 2013-08-09T12:04:08.290 回答