- GoogleMap
- 2013-09-13
この記事は最終更新日から1年以上経過しています。
Google Maps Javascript APIを利用して2点間の距離と、移動にかかる所要時間を計測します。
計測にはgoogle.maps.DirectionsServiceクラスを使用します。
基本はGoogleMap ルート検索と同じです。
リクエスト用のプロパティクラスを作成します。
var request = { origin: null, //出発地点のLatLngオブジェクト destination: null, //到着地点のLatLngオブジェクト //DRIVING=自動車,BICYCLING=自転車,TRANSIT=電車,WALKING=徒歩 travelMode: google.maps.DirectionsTravelMode.DRIVING, avoidHighways: false, //trueの場合、ルートサービスで可能な場合は高速道路を避けるように指示します。省略可能 avoidTolls: false, //true の場合、ルート サービスで可能な場合は有料道路を避けるように指示します。省略可能 provideRouteAlternatives: false, //代替ルートを提供するかどうかを指定します。省略可能 unitSystem: google.maps.UnitSystem.METRIC //距離を表示する際に使用される優先単位系。デフォルトは出発地点の国で使用される単位系。 //IMPERIAL=距離をヤード法の単位で表す。METRIC=の距離をメートル法の単位で表す。 };
DirectionsServiceのインスタンスを生成
var directionsService = new google.maps.DirectionsService();
出発地点と到着地点を設定します。
request.origin = new google.maps.LatLng(34.73307796637832, 135.49859046936035); //新大阪駅 request.destination = new google.maps.LatLng(35.681003987351055, 139.76703643798828); //東京駅
返ってきたレスポンスを取得するためのDirectionsRendererクラスのインスタンスを生成
directionsDisplay = new google.maps.DirectionsRenderer();
ルート検索を実行し、距離を計測します。
directionsService.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { directionsDisplay.setDirections(response); currentDirections = directionsDisplay.getDirections(); var route = currentDirections.routes[0]; for(var i = 0; i < route.legs.length; i++) { //リクエストで指定されたUnitSystemを使用した、距離値の文字列表現 route.legs[i].distance.text; route.legs[i].distance.value; //メートル単位の距離 route.legs[i].duration.text; //所要時間の文字列 route.legs[i].duration.value; //秒単位の所要時間 } } });
【複数の出発地と目的地の間の距離を計算する】
ただし、複数指定できる件数は出発地と目的地で各25件までです。
それを超過した場合はgoogle.maps.DistanceMatrixStatus.MAX_DIMENSIONS_EXCEEDED
が返されます。
DistanceMatrixServiceクラスのインスタンスを生成
var distanceMatrixService = new google.maps.DistanceMatrixService();
出発地と到着地を配列で作成
var org = new Array(); org.push(new google.maps.LatLng(34.73307796637832, 135.49859046936035)); //新大阪駅 org.push(new google.maps.LatLng(35.681003987351055, 139.76703643798828)); //東京駅 org.push(new google.maps.LatLng(33.5895625839363, 130.42046070098877)); //博多駅 var dst = new Array(); dst.push(new google.maps.LatLng(35.36056613998345, 138.72788429260254)); //富士山
リクエスト用のプロパティクラスを作成
var request = { avoidHighways: false, //true の場合、可能な限り高速道路を避ける(省略可) avoidTolls: false, //true の場合、可能な限り有料道路を避ける(省略可) destinations: dst, //Array.<LatLng>|Array.<string> 目的地の住所文字列の配列やLatLngオブジェクトの配列(必須) origins: org, //Array.<LatLng>|Array.<string> 出発地の住所文字列の配列やLatLngオブジェクトの配列(必須) travelMode: google.maps.DirectionsTravelMode.DRIVING, //DRIVING=自動車,BICYCLING=自転車,TRANSIT=電車,WALKING=徒歩 unitSystem: google.maps.UnitSystem.METRIC //距離を表示する際に使用される優先単位系。デフォルトは出発地点の国で使用される単位系。 //IMPERIAL=距離をヤード法の単位で表す。METRIC=の距離をメートル法の単位で表す。 };
実行します。
distanceMatrixService.getDistanceMatrix(reqest, function(response, status) { if(status == google.maps.DistanceMatrixStatus.OK) { var s = ""; for(var i = 0; i < response.rows.length; i++) { s += response.originAddresses[i] + "~"; //出発地点の住所 s += response.destinationAddresses + " "; //到着地点の住所 s += response.rows[i].elements[0].distance.value + "m"; //メートル単位の距離 } alert(s); } });
8,864 views