0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google MapのDistance Matrix API(距離行列サービス)を使ってみた

Last updated at Posted at 2024-01-20

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

上記の通り、車と徒歩では距離が変わっています、徒歩のほうが短いですね。
また、車の場合、方向により距離が異なっています、一方通行など考慮しているようです。

以上、簡単に使ってみました。

Googleの公式ドキュメントはこちら

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?