如何使PhoneGap应用程序更少地保存当前的地理位置?

时间:2016-04-26 00:40:50

标签: javascript cordova google-maps-api-3 coordinates phonegap-build

我正在开发一个有趣的应用程序,它允许您记录您拍摄的路线。我正在使用它来了解Google Maps API以及Phonegap Build,因此这些是我在这里使用的工具。

我制作了一个基本的应用程序,它将位置数据(lat,lng)收集到一个数组中,然后使用Google的API在地图上显示结果。在将来,我想用一条线连接它们,允许注释等等。

这是我邻居的驱动器的样子:

a trip around with coordinates

非常整洁。但是,这里有些不对劲。尝试映射那么多坐标点时,较长的行程会使应用程序崩溃。这里in the docs描述了选项哈希。我看起来像这样:

var options = { maximumAge: 1000, timeout: 3000, enableHighAccuracy: true };

我不确定我完全理解这个解释。 maximumAge似乎意味着,除了新的GPS或位置数据之外,它只会使用前一个,因此将其设置为9999999会使其永远不会使用缓存数据。

超时比较棘手。似乎位置信息不是保证,因此有时它会引发错误。但增加这个数字是否会影响一个积分较少的路线?我在哪里可以找到有关GPS系统与手机配合使用的信息?

如何更改这些配置,以便用更少的点进行更准确的绘图?

1 个答案:

答案 0 :(得分:0)

你应该使用navigator.geolocation.watchPosition 当检测到位置变化时,它返回设备的当前位置。当设备检索新位置时,geolocationSuccess回调将以Position对象作为参数执行。如果有错误,则使用PositionError对象作为参数执行geolocationError回调。

<强>语法

var watchId = navigator.geolocation.watchPosition(geolocationSuccess,
                                              [geolocationError],
                                              [geolocationOptions]);

示例

// onSuccess Callback
//   This method accepts a `Position` object, which contains
//   the current GPS coordinates
//
function onSuccess(position) {
    var element = document.getElementById('geolocation');
    element.innerHTML = 'Latitude: '  + position.coords.latitude      + '<br />' +
                        'Longitude: ' + position.coords.longitude     + '<br />' +
                        '<hr />'      + element.innerHTML;
}

// onError Callback receives a PositionError object
//
function onError(error) {
    alert('code: '    + error.code    + '\n' +
          'message: ' + error.message + '\n');
}

// Options: throw an error if no update is received every 30 seconds.
//
var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { timeout: 3000 });

现在,只有在移动设备时才会捕获这种位置,因此路线的绘图点较少。 根据您的要求更改超时。

clearwatch当您想要停止观看设备位置的更改时。