Gmaps.js距离路线

Ale*_*ore 2 javascript maps jquery google-maps gmaps.js

我在我正在建设的一个小项目中使用Gmaps.js api.

基本上复制谷歌地图功能我想要获得从一个地址到另一个地址的路线和距离(可以只是输入/表格字段).我注意到这个演示,但它需要点击地图,也不显示总距离或行车时间?

有关从表单解析2个地址的最佳方法的任何意见,然后使用gmaps.js api计算路由和驱动时间?

Mat*_*hew 9

将其分解成您需要的部分:

  1. 搜索表单输入的地址,并使用地理编码API对其进行地理编码.
  2. 使用地理编码的结果来计算路线.
  3. 从路线和绘图/显示中提取所需数据

对于地理编码,请参阅此示例:http://hpneo.github.io/gmaps/examples/geocoding.html

GMaps.geocode({
  address: $('#Start').val(),
  callback: function(results, status) {
    if (status == 'OK') {
      var latlng1 = results[0].geometry.location;
    }
  }
}); //Repeat for destination / end point
Run Code Online (Sandbox Code Playgroud)

现在你有你的纬度/经度.

然后你可以采取一些方法来路由,但只是绘制它可以像这样的例子:http://hpneo.github.io/gmaps/examples/routes.html

map.drawRoute({
  origin: [latlng1.lat(), latlng1.lng()],
  destination: [latlng2.lat(), latlng2.lng()],
  travelMode: 'driving',
  strokeColor: '#131540',
  strokeOpacity: 0.6,
  strokeWeight: 6
});
Run Code Online (Sandbox Code Playgroud)

如果您打电话getRoutes而不是drawRoute您应该取回一个DirectionsResult对象:https://developers.google.com/maps/documentation/javascript/directions#DirectionsResults.该TransitDetails对象包含以到达时间的形式到达终点位置的旅行时间的信息.每个leg还包含一个持续时间和距离,您可以通过它们进行循环并访问以下内容:

foreach($directions->routes[0]->legs as $leg) {
    $time+=$leg.duration.value
    $distance+=$leg.distance.value
}
Run Code Online (Sandbox Code Playgroud)

更新:

正在玩API - 并原谅嵌套的回调 - 但这是一个有效的例子:http://jsfiddle.net/mdares/82Dp2/

jQuery(document).ready(function () {
    var map;
    var latlng1;
    var latlng2;

    GMaps.geocode({
        address: $('#Start').val(),
        callback: function (results, status) {
            if (status == 'OK') {
                latlng1 = results[0].geometry.location;
                GMaps.geocode({
                    address: $('#End').val(),
                    callback: function (results, status) {
                        if (status == 'OK') {
                            latlng2 = results[0].geometry.location;
                            map = new GMaps({
                                div: '#map',
                                lat: latlng1.lat(),
                                lng: latlng1.lng(),
                                zoom: 12
                            });

                            map.drawRoute({
                                origin: [latlng1.lat(), latlng1.lng()],
                                destination: [latlng2.lat(), latlng2.lng()],
                                travelMode: 'driving',
                                strokeColor: '#131540',
                                strokeOpacity: 0.6,
                                strokeWeight: 6
                            });
                            map.getRoutes({
                                origin: [latlng1.lat(), latlng1.lng()],
                                destination: [latlng2.lat(), latlng2.lng()],
                                callback: function (e) {
                                    var time = 0;
                                    var distance = 0;
                                    for (var i=0; i<e[0].legs.length; i++) {
                                        time += e[0].legs[i].duration.value;
                                        distance += e[0].legs[i].distance.value;
                                    }
                                    alert(time + " " + distance);
                                }
                            });

                        }
                    }
                });
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 小提琴被打破是因为`raw.github`包含是只读的.请使用rawgithub.com:`https:// rawgithub.com/HPNeo/gmaps/master/gmaps.js` (2认同)
  • 可能,但作为一项规则,你永远不应该使用`raw.github`包含.不久前,他们改用只读(nosniff)来起到威慑作用.rawgithub.com存在以撤消.这里有一个模糊的解释[http://rawgithub.com/](http://rawgithub.com/) (2认同)