Google Maps APIは、地図や地理情報サービスをウェブアプリケーションに統合するための強力なツールです。特に、ルート検索機能は多くの場面で役立ちます。この記事では、Google Maps APIのDirectionsServiceを使用してルート検索を行う方法を初心者向けにわかりやすく説明します。
参考: ルートサービス(Directions Service)
HTMLファイルの作成
任意のエディタでHTMLファイルを作成します。
■sample.html
<!DOCTYPE html>
<html>
<head>
<title>名古屋駅から名古屋城までのルート検索</title>
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
<style>
#map {
height: 100%;
width: 75%; /* 幅を75%に設定 */
float: left; /* 左側に配置 */
}
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#panel {
height: 100%;
width: 25%; /* 幅を25%に設定 */
float: right; /* 右側に配置 */
background-color: #fff;
padding: 10px;
border: 1px solid #999;
text-align: left;
line-height: 30px;
box-sizing: border-box; /* パディングとボーダーを含む幅と高さを計算 */
}
</style>
</head>
<body>
<div id="panel"></div>
<div id="map"></div>
<script src="script.js"></script>
</body>
</html>
5行目:Google Maps JavaScript APIを読み込みます。YOUR_API_KEYにはご自分の取得したAPIキーを入力します。
6行目~28行目:地図のスタイルを設定します。
30行目~35行目:地図を表示するための<div>とJavaScriptファイルのリンクを含みます。
JavaScriptファイルの作成
同じディレクトリにscript.jsファイルを作成します。
今回は名古屋駅から名古屋城までのルート検索をし、結果をマップの右側に表示します。
■script.js
function initMap() {
var nagoyaStation = {lat: 35.170915, lng: 136.881537}; // 名古屋駅
var nagoyaCastle = {lat: 35.185158, lng: 136.899885}; // 名古屋城
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 14,
center: nagoyaStation // マップの中心を名古屋駅に設定
});
var directionsService = new google.maps.DirectionsService();
var directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
directionsRenderer.setPanel(document.getElementById('panel'));
var request = {
origin: nagoyaStation,
destination: nagoyaCastle,
travelMode: 'DRIVING'
};
directionsService.route(request, function(result, status) {
if (status == 'OK') {
directionsRenderer.setDirections(result);
var route = result.routes[0];
var leg = route.legs[0];
document.getElementById('panel').innerHTML += '<b>所要時間:</b> ' + leg.duration.text;
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
window.onload = initMap;
5行目:新しい地図オブジェクトを作成します。
10行目:ルート検索サービスを提供するオブジェクトです。
11行目:ルートを地図上に描画するオブジェクトです。
14行目~18行目ト:ルート検索のためのリクエストパラメータを設定します。
出発地(origin)、目的地(destination)、移動手段(travelMode)を指定します。
20行目:ルート検索を実行します。検索結果とステータスをコールバック関数で受け取ります。
21行目:レスポンスに有効な DirectionsResult が格納されている場合のstatusは ’OK’ です。
22行目:検索結果を地図上に描画します。
DirectionsServiceのリクエストパラメータ
DirectionsServiceの主なリクエストパラメータです。
パラメータ | 設定値 | 説明 |
origin | ルート検索の出発地を指定 (必須) |
String(「シカゴ、イリノイ」など)や LatLng 値、Place オブジェクトとして指定 |
destination | ルート検索の目的地を指定 (必須) |
String(「シカゴ、イリノイ」など)や LatLng 値、Place オブジェクトとして指定 |
travelMode | 移動手段を指定 (必須) |
「移動手段の種類」参照 |
transitOptions | travelMode が TRANSIT の場合のみに適用される値を指定 | 「交通機関のオプション」参照 |
移動手段(travelMode)の種類
現在(2024.7時点)サポートされている移動手段です。
設定値 | 説明 |
DRIVING (デフォルト) | 道路網を利用した標準の運転ルート |
BICYCLING | 自転車専用道路と優先道路を使った自転車ルート |
TRANSIT | 公共交通機関を使用するルート |
WALKING | 歩行者専用道路と歩道を通る徒歩経路 |
交通機関(TRANSIT)のオプション
交通機関(TRANSIT)のオプションです。何れのオプションも省略可能です。
オプション | 説明 |
arrivalTime | 希望する到着時刻を Date オブジェクトとして指定。到着時刻が指定されている場合、出発時刻は無視されます。 |
departureTime | 希望する出発時刻を Date オブジェクトとして指定。arrivalTime が指定されている場合、departureTime は無視されます。departureTime と arrivalTime の両方に値が指定されていない場合は、デフォルト値として現在時刻が使用されます。 |
modes[] | 1 つ以上の TransitMode オブジェクト リテラルを含む配列。 TransitModeには以下が指定可能です。 ・BUS(バス) ・RAIL(電車、市街電車、路面電車、地下鉄) ・SUBWAY(地下鉄) ・TRAIN(電車) ・TRAM(市街電車、路面電車) |
routingPreference | 公共交通機関を使ったルートを検索する際の条件を指定。以下が指定可能です。 ・FEWER_TRANSFERS(乗り換え回数に制限を付ける) ・LESS_WALKING(歩行距離に制限を付ける) |
実行と確認
ファイルの設定が完了したら、ブラウザでHTMLファイルを開いて地図とルートが正しく表示されることを確認します。
応用編:パラメータの追加(経由地)
Google Maps Directions APIは、さらに多くのパラメータをサポートしています。以下は、いくつかの代表的なパラメータです。
オプション | 説明 |
waypoints | 経由地を指定 |
optimizeWaypoints | より効率的な順序に地点を並べ替えて、経由地を最適化する |
avoid | 高速道路や有料道路を避ける設定 |
以下は、経由地(waypoints)を追加したリクエストの例です。
※HTMLファイルは同じファイルを使用します。
■script.js
function initMap() {
var nagoyaStation = {lat: 35.170915, lng: 136.881537};
var nagoyaCastle = {lat: 35.185158, lng: 136.899885};
var nagoyaMuseum = {lat: 35.161438, lng: 136.900288}; // 名古屋市美術館
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 14,
center: nagoyaStation // マップの中心を名古屋駅に設定
});
var directionsService = new google.maps.DirectionsService();
var directionsRenderer = new google.maps.DirectionsRenderer();
directionsRenderer.setMap(map);
directionsRenderer.setPanel(document.getElementById('panel'));
var request = {
origin: nagoyaStation,
destination: nagoyaCastle,
waypoints: [
{
location: nagoyaMuseum,
stopover: true
}
],
travelMode: 'DRIVING'
};
directionsService.route(request, function(result, status) {
if (status == 'OK') {
directionsRenderer.setDirections(result);
var route = result.routes[0];
var leg = route.legs[0];
document.getElementById('panel').innerHTML += '<b>所要時間:</b> ' + leg.duration.text;
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
window.onload = initMap;
4行目:名古屋市美術館の緯度経度を追加しました。
var nagoyaMuseum = {lat: 35.161438, lng: 136.900288}; // 名古屋市美術館
18行目~23行目:requestオブジェクトにwaypointsオプションを追加しました。
waypoints: [
{
location: nagoyaMuseum,
stopover: true
}
],
※stopover は地点がルート上の停止地点であることを示すブール値で、ルートを 2 つに分割する機能があります。
実行と確認
ファイルの設定が完了したら、ブラウザでHTMLファイルを開いて経由地を含めたルートが正しく表示されることを確認します。
まとめ
今回はGoogle Maps APIのDirectionsServiceを使用したルート検索の基本的な使い方を説明しました。ぜひ参考にしてみてください。