Google Maps API V3で、google.maps.ElevationServiceクラスを使ってみるサンプルプログラム。地図上の線を何等分かした点の標高を取得します。
- プログラムに興味はなく、地図上で標高調べたいだけの場合は緯度・経度・住所・標高を取得するを。
マーカーをクリックすると、その地点の標高を表示します。
// 初期設定(地図) var map = new google.maps.Map(document.getElementById("map"), { zoom: 8, center: new google.maps.LatLng(36, 138), mapTypeId: google.maps.MapTypeId.ROADMAP }); // 初期設定(経由地) var path = [ new google.maps.LatLng(35.630152, 139.740440), // 品川駅 new google.maps.LatLng(35.667160, 138.568993), // 甲府駅 new google.maps.LatLng(35.170694, 136.881637) // 名古屋駅 ]; // わかりやすく、線を引いておきます。 new google.maps.Polyline({ map: map, path: path }); // リクエストを発行 new google.maps.ElevationService().getElevationAlongPath({ path: path, samples: 9 // 分割数 }, function(results, status) { if (status == google.maps.ElevationStatus.OK) { for (var i in results) { if (results[i].elevation) { // 標高ゲット! var elevation = results[i].elevation; // あとはご自由に・・・。 var marker = (new google.maps.Marker({ position: results[i].location, map: map }); attachMessage(marker, elevation + "m"); } } } else if (status == google.maps.ElevationStatus.INVALID_REQUEST) { alert("リクエストに問題アリ!requestで渡している内容を確認せよ!!"); } else if (status == google.maps.ElevationStatus.OVER_QUERY_LIMIT) { alert("短時間にクエリを送りすぎ!落ち着いて!!"); } else if (status == google.maps.ElevationStatus.REQUEST_DENIED) { alert("このページでは ElevationResult の利用が許可されていない!・・・なぜ!?"); } else if (status == google.maps.ElevationStatus.UNKNOWN_ERROR) { alert("原因不明のなんらかのトラブルが発生した模様。"); } else { alert("えぇ~っと・・、バージョンアップ?"); } }); // 複数のgoogle.maps.Markerに吹き出しをつける function attachMessage(marker, msg) { google.maps.event.addListener(marker, 'click', function(event) { new google.maps.InfoWindow({ content: msg }).open(marker.getMap(), marker); }); }
複数の地点を結んだ線を何等分かした地点の標高を得るには、ElevationServiceクラスの getElevatioAlongPath() を使います。第1引数 PathElevationRequest の path プロパティにそれぞれの地点の緯度経度を配列で、samples プロパティに何か所でサンプリングするか(=何か所の標高をとるか(=何等分するか+1))を与えると、第2引数のコールバック関数に検索結果が引数として渡されます。
サンプルでは、品川駅~甲府駅~名古屋駅を9地点でサンプリングしています。この数には両端2点を含むので、全体を8等分することになります。各地点間で9地点を調べているわけではありません。全体の最高地点とか最低地点とかをとれるわけでもありません。起点~終点間を狭くしてsamplesをMAXの1024にすればかなり近似できるかとは思いますが。
サンプルでは、品川駅~甲府駅~名古屋駅を9地点でサンプリングしています。この数には両端2点を含むので、全体を8等分することになります。各地点間で9地点を調べているわけではありません。全体の最高地点とか最低地点とかをとれるわけでもありません。起点~終点間を狭くしてsamplesをMAXの1024にすればかなり近似できるかとは思いますが。