39

我使用 Google Maps API 遇到的所有示例似乎都显示了某种地图。当您要求从 A 到 B 的道路描述时,我想将有关估计的汽车旅行时间的数据合并到站点中。而且只有那个数据。是否可以不为最终访问者加载地图?

4

6 回答 6

25

上述答案违反Google API 服务条款,因此不正确

Google Maps API 仅允许您在参考显示给用户的 Google Map 时计算旅行时间。

如果您不向服务的最终用户显示 Google 地图,则无法使用 API。

更新:

这里的任何答案,如果没有显示在谷歌地图上映射的最终结果,都违反了上述服务条款,最终是不正确的。

于 2012-11-08T12:37:43.690 回答
24

是的,这绝对可以使用 API。您可以构造一个没有地图或方向 div 的 GDirections 对象。您可以执行从 A 到 B 的加载请求,然后调用getDuration方法来获取总行程时间。

首先,您需要创建一个方向对象:

// no need to pass map or results div since
// we are only interested in travel time.
var directions = new GDirections (); 

然后执行加载请求以解析方向(我使用了两个纬度和经度作为起点和终点,但您也可以在此处使用地址):

var wp = new Array ();
wp[0] = new GLatLng(32.742149,119.337218);
wp[1] = new GLatLng(32.735347,119.328485);
directions.loadFromWaypoints(wp);

然后,您需要监听load事件,以便在解决方向后调用getDuration

GEvent.addListener(directions, "load", function() {
    $('log').innerHTML = directions.getDuration ().seconds + " seconds";
        });

您可以在此处找到整个示例,并在此处找到 JavaScript。您可以查看Google 地图文档以获取有关您可以为 GDirections 对象提供的选项(如步行距离等)的更多信息。您还应该收听地理编码失败的错误事件。

于 2009-06-25T12:43:16.637 回答
22

备案:此时(2015 年)GDirections、GLatLng、GEvent 等已弃用


您可以使用google.maps.DirectionsService 类(Google Maps JavaScript API V3)

在以下代码段中,位置和目标是包含纬度和经度坐标的对象。

1) google.maps.DirectionsService 类允许 LatLng 和字符串值来提供它们的起点和终点属性。
2) LatLng 是地理坐标中的一个点:纬度和经度。

var origin = new google.maps.LatLng( location.latitude, location.longitude ); // using google.maps.LatLng class
var destination = target.latitude + ', ' + target.longitude; // using string

var directionsService = new google.maps.DirectionsService();
var request = {
    origin: origin, // LatLng|string
    destination: destination, // LatLng|string
    travelMode: google.maps.DirectionsTravelMode.DRIVING
};

directionsService.route( request, function( response, status ) {

    if ( status === 'OK' ) {
        var point = response.routes[ 0 ].legs[ 0 ];
        $( '#travel_data' ).html( 'Estimated travel time: ' + point.duration.text + ' (' + point.distance.text + ')' );
    }
} );
于 2015-04-18T03:48:03.000 回答
6

来自google.maps.DirectionsRenderer

使用距离:

directionsDisplay.directions.routes[0].legs[0].distance.text

使用持续时间:

directionsDisplay.directions.routes[0].legs[0].duration.text
于 2016-03-19T11:16:37.107 回答
6
  1. 首先去这里: https ://developers.google.com/maps/documentation/distance-matrix/start 您需要:创建或选择一个项目,启用API并获取API密钥只需点击“获取密钥”并假设你有一个 Gmail 帐户,你可以让一切顺利进行(或者在登录到你的 gmail 帐户后转到 console.developer.google.com,创建一个应用程序,启用 API,并在那里获取 API 密钥)。
  2. 现在转到https://developers.google.com/maps/documentation/distance-matrix/intro并按照详细信息进行操作。需要注意的几件事:如果您希望当前交通影响您的驾驶时间,请使用这些:&mode=driving&departure_time=now&traffic_model=pessimistic。我也用过 &units=imperial

仅当满足以下所有条件时,才会返回流量持续时间:

该请求包括一个离开时间参数。该请求包括有效的 API 密钥或有效的 Google Maps APIs Premium Plan 客户端 ID 和签名。请求路线的交通状况可用。模式参数设置为驱动。

至少从 2019 年 5 月开始,您现在可以在有或没有地图的情况下显示行驶时间。

您可以在 Google 地图上或没有地图的情况下显示距离矩阵 API 结果。如果您想在地图上显示距离矩阵 API 结果,则这些结果必须显示在 Google 地图上。禁止在非 Google 地图的地图上使用距离矩阵 API 数据。

资料来源:距离矩阵使用限制,也可以查看谷歌地图条款和条件

请注意,Mapquest 不会根据实际交通情况显示行驶时间。

于 2017-05-02T21:47:53.267 回答
2

我为此苦苦挣扎了很长时间,但最终通过 AJAX 调用解决了它(确保您已链接到 jQuery 来执行此操作)。

 //Pass parameters to a function so your user can choose their travel 
 locations

 function getCommuteTime(departLocation, arriveLocation) {
   //Put your API call here with the parameters passed into it
   var queryURL = 
   "https://maps.googleapis.com/maps/api/distancematrix/json?
   units=imperial&origins=" + departLocation + "&destinations=" + 
   arriveLocation + "&key=YOUR_API_KEY"

  //Ajax retrieves data from the API
  $.ajax({
  url: queryURL,
  method: "GET"
  }).then(function(response) {

    //Navigate through the given object to the data you want (in this 
     case, commute time)
    var commuteTime = response.rows[0].elements[0].duration.text;

    console.log(commuteTime)
   });

  } 


//This is where your user can give you the data you need
$("#addRoute").on("click", function(event) {

event.preventDefault();

var departLocation = $("#departInput").val().trim();
var arriveLocation = $("#arriveInput").val().trim();

//call the above function
getCommuteTime(departLocation, arriveLocation);
  });
于 2018-02-07T20:14:05.217 回答