1

我正在创建一个与旅行相关的 Phonegap 应用程序(使用 jQuery 和 Google Maps API V3),并希望向用户显示他/她自启动应用程序以来所走过的距离。

是否有任何谷歌功能?或者任何人都可以推荐我可以做些什么来获得总行驶距离?

4

1 回答 1

3

它可以很容易地完成。您必须了解,通过使用适用于 jQuery 的 Google Maps API,您拥有自己完成所需的所有工具。

首先,您需要定义一个时间段(比如说 1 分钟)。我们将需要它来创建我们运动的参考点。下一步是使用 phonegap/cordova geolocation API 来计算我们的位置(纬度和经度):

http://docs.phonegap.com/en/1.0.0/phonegap_geolocation_geolocation.md.html

此时选择你想要:

  1. 在某个js数组中每1分钟存储一个位置(纬度和经度)
  2. 或者像第 1 点那样做同样的事情,并使用 gmap addMarker 能力在地图上显示它。

最后,您需要计算距离。遍历位置数组并使用纬度和经度来计算每个可用点之间的距离。在这里,您将找到用于此类计算的函数(带有 js 示例):

http://www.movable-type.co.uk/scripts/latlong.html

或者您可以使用 Google Maps APi 功能:

google.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);

编辑

这是一个适合您的工作示例:http: //jsfiddle.net/Gajotres/6YpAG/

代码:

$(document).ready(function(){
    // Chicago
    var coordinateObject= new Object();
    coordinateObject.lat = '41.83682786072714';
    coordinateObject.lng = '-87.626953125';
    geoLocationHandler.addLocation(coordinateObject);
    // New York
    var coordinateObject= new Object();    
    coordinateObject.lat = '40.58058466412761';
    coordinateObject.lng = '-74.00390625';
    geoLocationHandler.addLocation(coordinateObject);
    // Toronto
    var coordinateObject= new Object();    
    coordinateObject.lat = '43.70759350405294';
    coordinateObject.lng = '-79.365234375';
    geoLocationHandler.addLocation(coordinateObject);

    var len = geoLocationHandler.arrLocations.length;
    for (var i = 0; i < len; i++) {
        if(i == 1){
            geoLocationHandler.distance += geoLocationHandler.calcDistance(geoLocationHandler.arrLocations[i-1].lat,geoLocationHandler.arrLocations[i-1].lng,geoLocationHandler.arrLocations[i].lat,geoLocationHandler.arrLocations[i].lng);
        }
    }

    alert(geoLocationHandler.distance);
});

var geoLocationHandler = {
    arrLocations : [],
    distance : 0,
    addLocation:function(obj){
        geoLocationHandler.arrLocations.push(obj);
    },
    calcDistance:function(fromLat, fromLng, toLat, toLng) {
        return google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(fromLat, fromLng), new google.maps.LatLng(toLat, toLng));
    }
};

最终结果是以米为单位的距离。

每次你有一个新的协调使用它来创建一个新对象并将其添加到数组中:

var coordinateObject= new Object();
coordinateObject.lat = '41.83682786072714'; // Change with your latitude
coordinateObject.lng = '-87.626953125'; // Change with your longitude
geoLocationHandler.addLocation(coordinateObject);
于 2012-12-22T10:22:56.970 回答