Google MapのDistance Matrix API(距離行列サービス)を使ってみたので、その時のメモ。
距離行列とは
こんな感じのマトリクス
金閣寺 | 銀閣寺 | 清水寺 | |
---|---|---|---|
金閣寺 | 0.0km | 6.7km | 8.6km |
銀閣寺 | 6.7km | 0.0km | 5.0km |
清水寺 | 8.6km | 5.0km | 0.0km |
Distance Matrix APIでは、このようなデータを取得できる。
距離だけでなく、所要時間も取得可能。ただし、私が試した結果は、車と徒歩での時間しか取得できなかった。
Google Mapのキーの取得方法はこちら(https://qiita.com/sera_ramon/items/707ac5064f6e6343df05)
TestDistanceMatrix.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>TEST PlacesService</title>
</head>
<body>
<!--div id="map" style="width:100%; height:500px"></div-->
<script>
const kinkakuji = "35.0393744,135.7266682";
const ginkakuji = "35.0272541,135.7945173";
const kiyomizudera = "34.9946706,135.7820861";
places = [kinkakuji, ginkakuji, kiyomizudera];
let map;
function initMap() {
const service = new google.maps.DistanceMatrixService();
const matrixOptions = {
origins: places,
destinations: places,
travelMode: 'DRIVING', // BICYCLING/DRIVING/TRANSIT/WALKING
//travelMode: 'TRANSIT',
//transitOptions : {
// //modes: ["BUS","RAIL","SUBWAY","TRAIN","TRAM"]
// modes: ["BUS"]
//},
};
service.getDistanceMatrix(matrixOptions, callback);
function callback(res, status) {
if (status !== "OK") {
alert("Error with distance matrix");
return;
}
//console.log(res);
const da = res.destinationAddresses;
console.log("" + da[0] + "," + da[1] + "," + da[2]);
const oa = res.originAddresses;
console.log("距離(km)のマトリクス");
for (var i = 0; i < places.length; i++) {
console.log(oa[i] + "," + res.rows[i].elements[0].distance.value + "," + res.rows[i].elements[1].distance.value + "," + res.rows[i].elements[2].distance.value);
}
console.log("所要時間(秒)のマトリクス");
for (var i = 0; i < places.length; i++) {
console.log(oa[i] + "," + res.rows[i].elements[0].duration.value + "," + res.rows[i].elements[1].duration.value + "," + res.rows[i].elements[2].duration.value);
}
}
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=<<<ここにキーを記載>>>&callback=initMap">
</script>
</body>
</html>
travelMode(移動手段)は、下記が指定可能
- BICYCLING:自転車(利用不可)
- DRIVING:車
- TRANSIT:公共交通機関(利用不可)
- WALKING:徒歩
※ BICYCLING、TRANSITの場合、res.rows[].elements[]が{status: 'ZERO_RESULTS'}となる
移動手段により距離が変わる?
距離が変わるということは、移動手段でルートが変わるということ
DRIVING(車)の場合
金閣寺 | 銀閣寺 | 清水寺 | |
---|---|---|---|
金閣寺 | 0m | 7190m | 10462m |
銀閣寺 | 7706m | 0m | 5868m |
清水寺 | 9976m | 5879m | 0m |
WALKING(徒歩)の場合
金閣寺 | 銀閣寺 | 清水寺 | |
---|---|---|---|
金閣寺 | 0m | 7062m | 9213m |
銀閣寺 | 7062m | 0m | 4838m |
清水寺 | 9213m | 4038m | 0m |
上記の通り、車と徒歩では距離が変わっています、徒歩のほうが短いですね。
また、車の場合、方向により距離が異なっています、一方通行など考慮しているようです。
以上、簡単に使ってみました。