PhoneGap地理定位对象不喜欢舍入?

时间:2013-08-03 19:58:15

标签: cordova geolocation rounding tofixed

我创建了一个演示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.watchPositionvar coords = position.coords;之间的行未注释,则函数执行将介于两者之间,行var geoText = 'Longitude is ' + coords.longitude + '.';未执行,$('#positionText').html(geoText); div为没有正确更新。

如果我注释掉这七条“舍入”线,一切都很好,div正在更新。同样的圆角就像加速度和指南针对象的魅力一样,这使得它更加奇怪。

有人能告诉我,我错过了什么?为什么PhoneGap地理定位对象不喜欢舍入,而罗盘和加速度对象可以正常使用?

1 个答案:

答案 0 :(得分:1)

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

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);