旅行距离

时间:2012-12-22 08:13:43

标签: android jquery cordova google-maps-api-3

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

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

1 个答案:

答案 0 :(得分:3)

可以轻松完成。您必须了解,通过使用Google Maps API for jQuery,您可以自己完成所有需要的工具。

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

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

此时选择您要:

  1. 在某些js数组中每1分钟存储一个位置(经度和纬度)
  2. 或者像第1点那样做同样的事情,并使用gmap addMarker功能在地图上显示它。
  3. 最后你需要计算距离。循环通过位置数组并使用纬度和经度来计算每个可用点之间的距离。在这里,您将找到用于此类计算的函数(使用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);