GoogleMapAPI Distance Matrix Service （2点間の移動を求める）

Google Maps PlatformのWeb ServicesのうちDistance Matrix APIを今回使う機会があり、中でも地図は表示させないで、時間や距離だけを計算してアウトプットしたかったのですが、なかなかいい文書がなく（理解できるものがなかった）困ったので作業記録的に書いています。

Google Maps PlatformのAPIKeyの部分などは多くの記事がありますので省略させていただきます。
どうしてもという方は下記に公式ドキュメントのリンクを貼っておきますので参考にしてください。

[APIKeyの設定の仕方](https://developers.google.com/maps/documentation/javascript/tutorial)

## Google Map Distance Matrix APIとは
公式ドキュメントより
>The Distance Matrix API is a service that provides travel distance and time for a matrix of origins and destinations. The API returns information based on the recommended route between start and end points, as calculated by the Google Maps API, and consists of rows containing duration and distance values for each pair.

要するに、
出発地と目的地の移動距離と時間をgoogleMapに照らし合わせて計算して提供しますよと。
ちなみに、Distance Matrixとは距離行列のことなのですが、API内部では線形代数的に計算しているのかと思いますがただの個人的な憶測なのでわかる方いたらご教示ください。

##2点間の移動時間を求める
まずはJavaScriptの全体のコードです。

```JavaScript:jQuery
function initMap() {

  var origin1 = {
    lat: 38.223963,
    lng: 140.321086
  };
  var destinationB = {
    lat: 38.240409,
    lng: 140.363541
  };

  var geocoder = new google.maps.Geocoder;

  var service = new google.maps.DistanceMatrixService;
  service.getDistanceMatrix({
    origins: [origin1],
    destinations: [destinationB],
    travelMode: 'DRIVING',
    unitSystem: google.maps.UnitSystem.METRIC,
    avoidHighways: false,
    avoidTolls: false
  }, function(response, status) {
    if (status !== 'OK') {
      alert('Error was: ' + status);
    } else {
      var originList = response.originAddresses;
      var outputDiv = document.getElementById('output');
      outputDiv.innerHTML = '';

      for (var i = 0; i < originList.length; i++) {
        var results = response.rows[i].elements;
        geocoder.geocode
                    for (var j = 0; j < results.length; j++) {
          outputDiv.innerHTML += 
            results[j].duration.text;
        }
      }
    }
  });
}
```

一つずつ簡単な解説を書いていきます。

スタート地点（origin）とゴール地点の（destination）を緯度経度で定義しています。
ちなみにこの二つは必須項目ですので絶対に指定してください。

```JavaScript:
var origin1 = {
    lat: 38.223963,
    lng: 140.321086
  };
  var destinationB = {
    lat: 38.240409,
    lng: 140.363541
  };

```
他にも、代表的な都市であれば

```JavaScript:
var origin1 = "都市名";
```
で指定できるみたいです。

以下でAPIに投げるためのハッシュを作成しています。

```JavaScript:
service.getDistanceMatrix({
    origins: [origin1],
    destinations: [destinationB],
    travelMode: 'DRIVING',
    unitSystem: google.maps.UnitSystem.METRIC,
    avoidHighways: false,
    avoidTolls: false
  }, 
```

帰ってきたものを確かめて、正しければデータを表示するように成形しています。

```JavaScript:
function(response, status) {
    if (status !== 'OK') {
      alert('Error was: ' + status);
    } else {
      var originList = response.originAddresses;
      var outputDiv = document.getElementById('output');
      outputDiv.innerHTML = '';

      for (var i = 0; i < originList.length; i++) {
        var results = response.rows[i].elements;
        geocoder.geocode
                    for (var j = 0; j < results.length; j++) {
          outputDiv.innerHTML += 
            results[j].duration.text;
        }
      }
    }
  });
```

##使ってみて
すごいザックリした説明ですが、わかってみると思いの外こんなものかといったものでしょう。
ただ、関数やオプションが豊富でQiitaで調べてみるというよりは公式ドキュメントや公式の使用例をみていじるのが一番早いかと思います。