Google Map APIを触ってみた

# はじめに

タイトルの通り！

# 本編
ここからが本編です

## Google Routes API
ルート検索を行うAPIです。

### 基本情報

メソッド：POST
リクエスト：https://routes.googleapis.com/directions/v2:computeRoutes
クエリパラメータ：key=APIキー

### ヘッダ

|項目|パラメータ群|概要|
|:-----------|:-----------|:-----------|
|X-Goog-FieldMask|routes.duration,routes.distanceMeters|取得したいレスポンスフィールド|

### リクエストボディ
下記の条件でのリクエストボティのサンプル
【発地点】東京都港区芝公園４丁目２−８
【着地点】東京都墨田区押上１丁目１−２
【経路】車でのルート計算（有料道路、高速道路、 フェリーを避ける）
【経路選定】リアルタイムの交通状況は考慮しない


```
{
    "origin":{
        "address": "東京都港区芝公園４丁目２−８"
    },
    "destination":{
        "address": "東京都墨田区押上１丁目１−２"
    },
    "travelMode":"DRIVE",
    "routingPreference":"TRAFFIC_UNAWARE",
    "routeModifiers": {
        "avoidTolls": true,
        "avoidHighways": true,
        "avoidFerries": true
    }
}
```

#### オプション
オプションはリクエストボディにて指定する。
以下のパラメータなどが設定できる。

##### 経路(Route)オプション
| パラメータ    | 説明                                                                 |
| ------------ | -------------------------------------------------------------------- |
| origin       | 出発地点の座標または住所を指定します。                                  |
| destination  | 到着地点の座標または住所を指定します。                                  |
| waypoints    | 経由地点の座標または住所の配列を指定します。<br>複数の経由地点を指定する場合は、カンマで区切ります。 |
| travelMode   | 交通手段を指定します。以下のいずれかを選択します:<br>- DRIVING: 車でのルートを計算します。<br>- WALKING: 徒歩でのルートを計算します。<br>- BICYCLING: 自転車でのルートを計算します。<br>- TRANSIT: 公共交通機関を使用してのルートを計算します。 |
| avoid        | 避けるべき要素を指定します。以下のいずれかを選択します:<br>- TOLLS: 有料道路を避けます。<br>- HIGHWAYS: 高速道路を避けます。<br>- FERRIES: フェリーを避けます。<br>- INDOOR: 屋内経路を避けます。<br>- NONE: 避けずにすべての経路を含めます。                           |
|routingPreference|ルート選定に交通状況を加味するかどうかを指定します。<br>以下のいずれかを選択します:<br>- ROUTING_PREFERENCE_UNSPECIFIED:ルーティング設定が指定されていません。デフォルトは TRAFFIC_UNAWARE です。<br>-TRAFFIC_UNAWARE:リアルタイムの交通状況は考慮せずにルートを計算します。<br>【課金レートが上がる】<br>- TRAFFIC_AWARE:実際の交通状況を加味したルートを計算します。<br>- TRAFFIC_AWARE_OPTIMAL:パフォーマンスを最適化することなく、実際の交通状況を加味したルートを計算します。この値を使用すると、レイテンシが最も高くなります。|                         

### レスポンス
ヘッダの`X-Goog-FieldMask`に指定した値を取得可能。

`Route`オブジェクト([ドキュメント](https://developers.google.com/maps/documentation/routes/reference/rest/v2/TopLevel/computeRoutes?hl=ja#Route))





```
{
  "routeLabels": [
    enum (RouteLabel)
  ],
  "legs": [
    {
      object (RouteLeg)
    }
  ],
  "distanceMeters": integer,
  "duration": string,
  "staticDuration": string,
  "polyline": {
    object (Polyline)
  },
  "description": string,
  "warnings": [
    string
  ],
  "viewport": {
    object (Viewport)
  },
  "travelAdvisory": {
    object (RouteTravelAdvisory)
  },
  "optimizedIntermediateWaypointIndex": [
    integer
  ],
  "localizedValues": {
    object (RouteLocalizedValues)
  },
  "routeToken": string
}
```


## Google Geocoding API
ジオコーディング：住所→緯度/経度を変換する。
※リバースジオコーディング：緯度/経度→住所については本記事では取りあげない。

### 基本情報

メソッド：GET
リクエスト：https://maps.googleapis.com/maps/api/geocode/json?
パラメータ
| 必須パラメータ        | 説明                                                                                                                              |
|----------------|---------------------------------------------------------------------------------------------------------------------------------|
|key|APIキー|
| address        | ジオコーディングの対象となる住所、地名、場所を指定します。                          |
|または|    
| components     | 住所の特定のコンポーネントに対してフィルタリングするために使用します。詳細な指定方法はドキュメントを参照してください。                                                                               |

|任意パラメータ| 説明|
|----------------|---------------------------------------------------------------------------------------------------------------------------------|
| outputFormat |出力形式を指定します。<br> - json（推奨） <br> - xml|
| bounds         | ジオコーディングの結果を特定の範囲内に制限します。矩形範囲を指定するために、南西端と北東端の緯度経度を指定します。 |
| language       | 言語を指定します。 |
| region         | 地域コードや地域名を指定します。|
| components     | コンポーネントフィルタリングのための追加パラメータを指定します。複数のコンポーネントを指定する場合は、カンマで区切ります。 |


### レスポンス
```
{
    "results": [
        {
            "address_components": [
                {
                    "long_name": "1",
                    "short_name": "1",
                    "types": [
                        "premise"
                    ]
                },
                {
                    "long_name": "3",
                    "short_name": "3",
                    "types": [
                        "political",
                        "sublocality",
                        "sublocality_level_4"
                    ]
                },
                {
                    "long_name": "2-chōme",
                    "short_name": "2-chōme",
                    "types": [
                        "political",
                        "sublocality",
                        "sublocality_level_3"
                    ]
                },
                {
                    "long_name": "Asakusa",
                    "short_name": "Asakusa",
                    "types": [
                        "political",
                        "sublocality",
                        "sublocality_level_2"
                    ]
                },
                {
                    "long_name": "Taito City",
                    "short_name": "Taito City",
                    "types": [
                        "locality",
                        "political"
                    ]
                },
                {
                    "long_name": "Tokyo",
                    "short_name": "Tokyo",
                    "types": [
                        "administrative_area_level_1",
                        "political"
                    ]
                },
                {
                    "long_name": "Japan",
                    "short_name": "JP",
                    "types": [
                        "country",
                        "political"
                    ]
                },
                {
                    "long_name": "111-0032",
                    "short_name": "111-0032",
                    "types": [
                        "postal_code"
                    ]
                }
            ],
            "formatted_address": "2-chōme-3-1 Asakusa, Taito City, Tokyo 111-0032, Japan",
            "geometry": {
                "location": {
                    "lat": 35.7147651,
                    "lng": 139.7966553
                },
                "location_type": "ROOFTOP",
                "viewport": {
                    "northeast": {
                        "lat": 35.715996,
                        "lng": 139.7976969802915
                    },
                    "southwest": {
                        "lat": 35.7109567,
                        "lng": 139.7949990197085
                    }
                }
            },
            "partial_match": true,
            "place_id": "ChIJ8T1GpMGOGGARDYGSgpooDWw",
            "plus_code": {
                "compound_code": "PQ7W+WM Taito City, Tokyo, Japan",
                "global_code": "8Q7XPQ7W+WM"
            },
            "types": [
                "establishment",
                "place_of_worship",
                "point_of_interest",
                "tourist_attraction"
            ]
        }
    ],
    "status": "OK"
}
```


# まとめ
Google Map APIを触ってみた