2013-08-03 24 views
0

我已经创建了一个演示PhoneGap应用程序,用于检查加速度,指南针和地理位置并向用户显示这些信息。应用程序使用PhoneGap Build编译。PhoneGap地理位置对象不喜欢四舍五入吗?

我用简单的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地理定位对象不喜欢四舍五入,而指南针和加速对象可以很好地使用它?您的位置对象的

+0

是你的立场对象回来空任何一部分?我把你的代码中的jsfiddle [这里](http://jsfiddle.net/andrewlively/LW4Uz/1/),玩它一点点,并得到它的工作就好了。它不仅打破试图在一个空值做.toFixed()的时候,它不是与PhoneGap的 –

+0

一个问题,看来,你得到了点(那么明显,但:|!)。请把这个评论重新定义为全尺寸的答案,所以我可以接受它并授予你的工作,并带有一些重要的意义。 – trejder

回答

1

部分回来了空,这是杀你的代码时,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);