web-dev-qa-db-ja.com

Google Maps APIを使用して旅行時間データを取得する

GoogleマップAPIを使用して出会ったすべての例は、何らかのマップを表示しているようです。 AからBへの道路の説明をサイトに要求するときに、車が提供する推定旅行時間に関するデータを組み込みたいと思います。そして、そのデータのみ。エンドビジター用のマップをロードしなくても可能ですか?

33
Felix Andersen

うん、これは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 (); 

次に、ロードリクエストを実行して方向を解決します(開始地点と終了地点として2つの緯度と経度を使用しましたが、ここでも住所を使用できます)。

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 を見つけることができます。 GDirectionsオブジェクトに指定できるオプションの詳細については、 Google Maps Documentation を確認してください(徒歩距離など)。ジオコーディングの失敗については、errorイベントもリッスンする必要があります。

20
RedBlueThing

上記の回答は、violationofGoogle API利用規約、したがって、incorrect

Google Maps APIでは、ユーザーに表示されるGoogleマップに対して参照されている場合にのみ、移動時間を計算できます。

サービスのエンドユーザーにGoogleマップを表示しないと、APIを使用できません。

更新:

Googleマップにマッピングされた最終結果を示さないここでの回答は、前述の利用規約に違反しており、最終的には間違っています。

23
Barry

レコードの場合:この時点(2015年)で、GDirections、GLatLng、GEventなどはdeprecated


google.maps.DirectionsService class (Google Maps JavaScript API V3)を使用できます

次のスニペットでは、場所とターゲットは緯度と経度の座標を含むオブジェクトです。

1)google.maps.DirectionsServiceクラスは、LatLng値と文字列値の両方を許可して、OriginプロパティとDestinationプロパティをフィードします。
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 + ')' );
    }
} );
19
Igor Parra

from google.maps.DirectionsRenderer

使用による距離:

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

使用による期間:

directionsDisplay.directions.routes[0].legs[0].duration.text
  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も使用しました

トラフィックの継続時間は、次のすべてに該当する場合にのみ返されます。

要求には、department_timeパラメーターが含まれています。リクエストには、有効なAPIキー、または有効なGoogle Maps APIプレミアムプランのクライアントIDと署名が含まれています。要求されたルートの交通状況が利用可能です。モードパラメータは、ドライビングに設定されます。

はい、Googleマップを運転時間とともに表示する必要があります。「Google Maps Distance Matrix APIは、Googleマップに結果を表示する場合にのみ使用できます。 Googleマップを表示せずにGoogle Maps Distance Matrix APIデータを使用することは禁止されています。」
必ずチェックアウトしてください: https://developers.google.com/maps/documentation/distance-matrix/usage-limits および https://developers.google .com/maps/terms T&Cの場合。

Mapquestは、実際の交通量に基づいた運転時間を表示しないことに注意してください。

3

私はこれに長い間苦労しましたが、最終的に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);
  });
2
Sasha Patsel