各地図APIで提供されている周辺検索機能の取得結果を比較する

# 概要
この記事では、無料で使える各地図APIの周辺検索機能を使用した時の取得結果の違いをまとめています。

現在個人で開発しているiOSアプリで地図APIの周辺検索機能を使用しようと考えており、提供されているものの中でどのAPIを使用するかを決めるために色々と調べています。
数あるAPIのなかでどれを使うかを決める個人的な判断基準として「無料か有料か」「一回のリクエストでどれだけの結果が取得できるのか」「どのような情報が得られるのか」があります。
後半２つに関してはまとめられているものが見つからず、自分で１つ１つ試してみなければいけなかったので、ついでにまとめてみました。

地図API使ってみようかなと思っている方や、周辺検索機能を使ってアプリを作成したいけどどれを使えばいいかわからないという方のお役に立てたら幸いです。

# 対象API
今回比較する対象のAPIは以下の通りです。

- Google Maps Platform(Google社)
- YOLP(Yahoo社)
- Places API(Forsquare社)
 
（順不同）

全て無料で使用することができるものなので、気になった方は使ってみてください！

# 比較について
比較するのは、周辺検索機能で必要になるリクエストパラメータとレスポンスデータです。
検索地点はすべて同じ座標（東京駅）です。
範囲は設定できるAPIに関しては半径1kmで設定しています。
またレスポンスの数が多いため、一取得できた数をまとめます。
使用するための方法等は公式ページに載っているので割愛します。

## Google Maps
### リクエストURL
```http
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=35.681236,139.767125&radius=1000&language=ja&key=[APIキー]
```

### リクエストパラメータ
- key
：APIのキー
- location
：経度、緯度
- radius
：検索する範囲（半径）

他にもオプションとしてキーワードを含めたり、場所の種類（飲食店とかショッピングモールとか）を設定できます。

### レスポンスデータ
- 数
１回のリクエストで20箇所取得

- 一例

```json
     {
         "geometry" : {
            "location" : {
               "lat" : 35.6803997,
               "lng" : 139.7690174
            },
            "viewport" : {
               "northeast" : {
                  "lat" : 35.8174453,
                  "lng" : 139.9188743
               },
               "southwest" : {
                  "lat" : 35.519042,
                  "lng" : 139.5628611
               }
            }
         },
         "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
         "id" : "hogehoge",
         "name" : "東京",
         "photos" : [
            {
               "height" : 1960,
               "html_attributions" : [
                  "\u003ca href=\"https://maps.google.com/maps/contrib/102623607224212887106/photos\"\u003eAntonio Alarcón Izquierdo\u003c/a\u003e"
               ],
               "photo_reference" : "CmRaAAAAdzsPjIs8HariYXoQpbhxsV34e1_xUL2Uw2-IygcAIozDmXOmYIITHDdw9rFHVyx_XtoV9ffmtt1Eh6vz1u3b1NYp-_TTzjWOZ8iRkSURNZ_3qYjFwuTfNFPIny6gO-zVEhAl5o8O2Aj7IyKcdEy5Y0U0GhQnRHOG5bMEUPqFDcQ5bBvlQUim3w",
               "width" : 4032
            }
         ],
         "place_id" : "hogehoge",
         "reference" : "hogehoge",
         "scope" : "GOOGLE",
         "types" : [ "colloquial_area", "locality", "political" ],
         "vicinity" : "東京"
      }
```

## YOLP
### リクエストURL
```http
https://map.yahooapis.jp/placeinfo/V1/get?lat=35.681236&lon=139.767125&appid=[APIキー]&output=json
```
### リクエストパラメータ
- appid：APIのキー
- lat：緯度
- lon：経度

他に出力形式等を設定できます。

### レスポンスデータ

- 数
１回のリクエストで15箇所取得

- 一例

```json
     {
        "Name": "東京駅（上越新幹線）",
        "Uid": "hogehoge",
        "Category": "駅（JR新幹線）",
        "Label": "東京駅（上越新幹線）",
        "Where": "千代田区",
        "Combined": "千代田区の東京駅（上越新幹線）付近",
        "Score": 79.98499852073192
      }
```

## Places API
###リクエストURL
```http
https://api.foursquare.com/v2/venues/search?ll=35.681236,139.767125&radius=1000&client_id=[ClientID]&client_secret=[ClientSecretID]&v=YYYYMMDD
```

### リクエストパラメータ
- ll：緯度、経度
- near：緯度経度がわからない時に指定する場所の名前（"東京駅"など）
- radius：範囲
- query：キーワード（"駅"とか）
- limit：検索結果の数、最大50

などなど。APIキー等以外の必須パラメータはllとnearだけです。(どちらかが設定されていればよい）

### レスポンスデータ
- 数
１回のリクエストで30箇所取得

- 一例

```json
             {
                "id": "hogehoge",
                "name": "山手線 東京駅",
                "location": {
                    "address": "丸の内1-9-1",
                    "lat": 35.680800680928556,
                    "lng": 139.76649834906092,
                    "labeledLatLngs": [
                        {
                            "label": "display",
                            "lat": 35.680800680928556,
                            "lng": 139.76649834906092
                        }
                    ],
                    "distance": 74,
                    "postalCode": "100-0005",
                    "cc": "JP",
                    "city": "千代田区",
                    "state": "東京都",
                    "country": "日本",
                    "formattedAddress": [
                        "丸の内1-9-1",
                        "千代田区, 東京都",
                        "100-0005",
                        "日本"
                    ]
                },
                "categories": [
                    {
                        "id": "hogehoge",
                        "name": "鉄道駅",
                        "pluralName": "鉄道駅",
                        "shortName": "鉄道駅",
                        "icon": {
                            "prefix": "https:\/\/ss3.4sqi.net\/img\/categories_v2\/travel\/trainstation_",
                            "suffix": ".png"
                        },
                        "primary": true
                    }
                ],
                "referralId": "v-1563365251",
                "hasPerk": false
            }
```

# 終わりに
今回まとめたAPIは全て無料で使えるものですが、それぞれ制限があります。
制限等については以下のはてなブログでの記事にまとめているので興味のある方は見てみてください。
因みに、下記記事で挙げている「Bing Maps API(Microsoft社)」は東京駅の座標で周辺検索結果が0件でした。日本は対応していないのかもしれませんね。
[【地図API】個人開発で嬉しい！無料で使える地図APIまとめ](https://naipaka.hatenablog.com/entry/2019/07/08/232711)

# 参考
- [位置情報 API  |  Google Maps Platform  |  Google Cloud](https://cloud.google.com/maps-platform/?hl=ja)
- [YOLP(地図):YOLP(地図) - Yahoo!デベロッパーネットワーク](https://developer.yahoo.co.jp/webapi/map/)
- [Foursquare Developer](https://developer.foursquare.com/places-api)