こんにちは。松田です。
GoogleMapsAPIにルート検索機能がついたらしいので試してみました。
英語版では以前から使えたようですが、日本語版での使用が可能になったということらしいです。
http://googlejapan.blogspot.com/2009/06/api.html
使い方は簡単で、今までのコードに少し付け足すだけでルート検索機能を追加することが出来ます。
1. script呼び出しの "v=2" の部分を "v=2.x" に変更
<script src="http://maps.google.com/maps?file=api &v=2.x &key=....
これで今回使用するGDirectionsクラスが使用できるようになります。
2. GDirectionsにGMap2オブジェクトを渡しインスタンスを生成
directions = new GDirections(map);
3. 出発地点と到着地点の「座標」もしくは「地名・名称」を配列に格納
座標の場合はGLatlng型を渡し、地名の場合はそのまま文字列で渡します。
points = [];
points.push(new GLatLng(35.706,139.76));
points.push('東京ドーム');
4. 座標、地名の配列をGDirectionsのloadFromWaypointsに渡す
directions.loadFromWaypoints(points);
これで完成です。
コード全体は以下のようになります。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script src="http://maps.google.com/maps?file=api &v=2.x &key=ABQIAAAAbMxmqyfT0_t60Kczi-q5lBSySxmB-uUmG4DOxxXg63OHEaT07BREeBFXvMHRK6Ipn7liRsdLZmNVNA" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var map;
var directions;
function load() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(35.706, 139.76), 13);
points = [];
points.push(new GLatLng(35.706,139.76));
points.push("東京ドーム");
// ルート詳細を表示する場合は第二引数にdivエレメントを渡す
directions = new GDirections(map, document.getElementById("route"));
directions.loadFromWaypoints(points);
}
}
//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 300px"></div>
<div id="route"></div>
</body>
</html>
実行結果はこちらです。
また、以下のようにGDirectionsコンストラクタの第2引数にdivエレメントを渡すとルートの詳細を自動的に表示してくれます。
directions = new GDirections(map, document.getElementById("route"));
これはこっちのページにサンプルを載せておきます。
divを一つ用意するだけでルートの詳細が出るのはうれしいですね。
これが見やすいのかどうかは微妙ですが。
3, 4の部分はloadFromWaypointsの代わりにloadを使った、文字列をまとめて一つ渡すだけの方法もありますが、コードの組みやすさや座標を組み込むことを考えると、loadFromWaypointsだけ覚えておけばいいんじゃないかなーと言う気がします。
directions.load(
"from: 東京都文京区本郷3丁目 to: 東京ドーム",
{
locale: "ja",
travelMode: G_TRAVEL_MODE_DRIVING // 交通手段
}
);
上記の交通手段の選択についてですが、APIでは2種類用意されているように記述されていますが、これが正確に動作しているかどうかは怪しいようです。
ルート検索のAPIについての質問 [Google-Maps-API-Japan]
また、このルート検索機能の仕様として、検索を実行すると開始地点・中継地点・到着地点に緑色のGMarkerが必ずaddOverlayされてしまいます。
自分で生成したマーカーをドラッグさせて開始地点・終了地点を決めるようなスクリプトを作ろうとすると、コイツが邪魔をしてうまくクリック出来なくなってしまうので注意しましょう。
本家にそれをうまく回避したデモがありました。
↓
http://esa.ilmari.googlepages.com/draggabledir.htm
なんにせよ使いどころの多い機能だと思いますので、今後も注目していきたいですね。