「GoogleMaps API V3」 の使い方その9(ルート検索)
■住所文字列からルート検索し、ルート描画
文字列の住所からルート検索を行い、そのルートをマップに表示します。
以下の、「ルート開始」のテキストボックスに開始の住所を入力し、「ルート終了」のテキストボックスに終了の住所を入力します。
[検索]ボタンをクリックするとマップ上にルートが描画されます。
今回の例では、TravelModeがWalkingになっていますので、歩行モードでの表示がされます。
ルート開始:
ルート終了:
ルート終了:
ルートのインスタンスをマップの生成と共に、初期処理にて生成しておきます。
[検索]ボタンをクリックされた時に、ルートの route メソッドを利用してルートのリクエストを行います。
ルート検索の結果は route メソッドで宣言された、コールバック関数に帰ってきます。
コールバック関数は results, status の引数を持ち、statusがOKでなければエラーが発生しています。
statusがOKの場合、resultsは DirectionsResult オブジェクトの配列として返されてきます。
返された配列の0番目の値にルート検索が入っています。
results[0]のプロパティとしてoverview_pathがありますが、緯度・経度の配列として格納されています。
これを使ってポリラインを表示してやれば、マップ上にルートが描画されます。
<head> <title>Google Map API v3-9</title> <script type="text/javascript" src="http://maps.google.com/maps/api/js?key=MyKeyCode" charset="utf-8"></script> <script type="text/javascript"> var directions; //ルートのインスタンス var map; //マップのインスタンス var ds = google.maps.DirectionsStatus;//ルート結果のステータス var directionsErr = new Array(); //ルート結果のエラーメッセージ directionsErr[ds.INVALID_REQUEST] = "指定された DirectionsRequest が無効です。"; directionsErr[ds.MAX_WAYPOINTS_EXCEEDED] = "DirectionsRequest に指定された DirectionsWaypoint が多すぎます。ウェイポイントの最大許容数は 8 に出発地点と到着地点を加えた数です。"; directionsErr[ds.NOT_FOUND] = "出発地点、到着地点、ウェイポイントのうち、少なくとも 1 つがジオコード化できませんでした。"; directionsErr[ds.OVER_QUERY_LIMIT] = "ウェブページは、短期間にリクエストの制限回数を超えました。"; directionsErr[ds.REQUEST_DENIED] = "ウェブページではルート サービスを使用できません。"; directionsErr[ds.UNKNOWN_ERROR] = "サーバー エラーのため、ルート リクエストを処理できませんでした。もう一度試すと正常に処理される可能性があります。"; directionsErr[ds.ZERO_RESULTS] = "出発地点と到着地点間でルートを見つけられませんでした。"; // Onload時処理 function initialize() { // ルートの生成 directions = new google.maps.DirectionsService(); // Google Mapで利用する初期設定用の変数 var mapOptions = { zoom: 17, mapTypeId: google.maps.MapTypeId.ROADMAP, center: new google.maps.LatLng(36.062092, 136.223323) }; // GoogleMapの生成 map = new google.maps.Map(document.getElementById("map"), mapOptions); } // [検索]ボタン処理 function searchRoute() { // テキストボックスから検索の出発・到着を取得 var origin = document.getElementById("origin").value; var destination = document.getElementById("destination").value; // ルート検索を依頼する directions.route( { // ルート リクエスト 'origin' : origin, //出発地点 'destination': destination,//到着地点 'travelMode' : google.maps.DirectionsTravelMode.WALKING //ルートタイプ:徒歩 }, function(results, status) { // ルート結果callback関数 if (status == ds.OK) { // 結果がOK ?? // ポリライン(折れ線)を生成し、マップに表示 var poly = new google.maps.Polyline({ map: map, //マップ path: results.routes[0].overview_path,//ポリラインの座標の列 strokeWeight: 5, //ストローク幅(ピクセル単位) strokeColor: "#f01010",//16進数形式のストロークの色 strokeOpacity: 0.5 //ストロークの不透明度(0.0~1.0) }); // 検索結果の中心設定 map.setCenter(results.routes[0].bounds.getCenter()); } else { // 結果がOKではない場合 alert("ルート検索が失敗しました。理由: " + directionsErr[status]); } }); } </script> </head> <body onload="initialize();"> <div id="map" style="width: 530px; height: 400px;"></div> <div> <input id="origin" type="textbox" value="福井駅(福井)" size="40" ><br /> <input id="destination" type="textbox" value="福井県福井市役所" size="40" ><br /> <input type="button" value="検索" onclick="searchRoute()"> </div> </body> </html>
■関連記事
⇒「GoogleMaps API V3」の使い方その1⇒「GoogleMaps API V3」の使い方その2
⇒「GoogleMaps API V3」の使い方その3(マーカーの表示)
⇒「GoogleMaps API V3」の使い方その4(イベント)
⇒「GoogleMaps API V3」の使い方その5(続イベント)
⇒「GoogleMaps API V3」の使い方その6(続々イベント)
⇒「GoogleMaps API V3」の使い方その7(ポリライン・ポリゴン)
⇒「GoogleMaps API V3」の使い方その8(ジオコーディング)
⇒「GoogleMaps API V3」の使い方その10(ルート検索2)
⇒「GoogleMaps API V3」の使い方その11(さらにInfowindow)