「GoogleMaps API V3」 の使い方その9(ルート検索)
■住所文字列からルート検索し、ルート描画
文字列の住所からルート検索を行い、そのルートをマップに表示します。
以下の、「ルート開始」のテキストボックスに開始の住所を入力し、「ルート終了」のテキストボックスに終了の住所を入力します。
[検索]ボタンをクリックするとマップ上にルートが描画されます。
今回の例では、TravelModeがWalkingになっていますので、歩行モードでの表示がされます。
ルートのインスタンスをマップの生成と共に、初期処理にて生成しておきます。
[検索]ボタンをクリックされた時に、ルートの route メソッドを利用してルートのリクエストを行います。
ルート検索の結果は route メソッドで宣言された、コールバック関数に帰ってきます。
コールバック関数は results, status の引数を持ち、statusがOKでなければエラーが発生しています。
statusがOKの場合、resultsは DirectionsResult オブジェクトの配列として返されてきます。
返された配列の0番目の値にルート検索が入っています。
results[0]のプロパティとしてoverview_pathがありますが、緯度・経度の配列として格納されています。
これを使ってポリラインを表示してやれば、マップ上にルートが描画されます。
02 | <title>Google Map API v3-9</title> |
03 | <script type= "text/javascript" src= "http://maps.google.com/maps/api/js?key=MyKeyCode" charset= "utf-8" ></script> |
04 | <script type= "text/javascript" > |
07 | var ds = google.maps.DirectionsStatus; |
08 | var directionsErr = new Array(); |
09 | directionsErr[ds.INVALID_REQUEST] = "指定された DirectionsRequest が無効です。" ; |
10 | directionsErr[ds.MAX_WAYPOINTS_EXCEEDED] = "DirectionsRequest に指定された DirectionsWaypoint が多すぎます。ウェイポイントの最大許容数は 8 に出発地点と到着地点を加えた数です。" ; |
11 | directionsErr[ds.NOT_FOUND] = "出発地点、到着地点、ウェイポイントのうち、少なくとも 1 つがジオコード化できませんでした。" ; |
12 | directionsErr[ds.OVER_QUERY_LIMIT] = "ウェブページは、短期間にリクエストの制限回数を超えました。" ; |
13 | directionsErr[ds.REQUEST_DENIED] = "ウェブページではルート サービスを使用できません。" ; |
14 | directionsErr[ds.UNKNOWN_ERROR] = "サーバー エラーのため、ルート リクエストを処理できませんでした。もう一度試すと正常に処理される可能性があります。" ; |
15 | directionsErr[ds.ZERO_RESULTS] = "出発地点と到着地点間でルートを見つけられませんでした。" ; |
18 | function initialize() { |
20 | directions = new google.maps.DirectionsService(); |
24 | mapTypeId: google.maps.MapTypeId.ROADMAP, |
25 | center: new google.maps.LatLng(36.062092, 136.223323) |
28 | map = new google.maps.Map(document.getElementById( "map" ), mapOptions); |
31 | function searchRoute() { |
33 | var origin = document.getElementById( "origin" ).value; |
34 | var destination = document.getElementById( "destination" ).value; |
39 | 'destination' : destination, |
40 | 'travelMode' : google.maps.DirectionsTravelMode.WALKING |
42 | function (results, status) { |
43 | if (status == ds.OK) { |
45 | var poly = new google.maps.Polyline({ |
47 | path: results.routes[0].overview_path, |
49 | strokeColor: "#f01010" , |
53 | map.setCenter(results.routes[0].bounds.getCenter()); |
56 | alert( "ルート検索が失敗しました。理由: " + directionsErr[status]); |
62 | <body onload= "initialize();" > |
63 | <div id= "map" style= "width: 530px; height: 400px;" ></div> |
65 | <input id= "origin" type= "textbox" value= "福井駅(福井)" size= "40" ><br /> |
66 | <input id= "destination" type= "textbox" value= "福井県福井市役所" size= "40" ><br /> |
67 | <input type= "button" value= "検索" onclick= "searchRoute()" > |
■関連記事
⇒
「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)