B4 の堤です。
今回は前回に引き続き、研究で用いたツールについて書きたいと思います。
私は観光推薦の研究を行なっており、推薦するためのスポットの抽出が課題となっています。現代では様々なサービスでプライバシーの関係から、位置情報を取得することが難しくなっています。そんな中で位置情報を用いずにスポットか否かを判断するのに私はGoogle Maps APIを用いて判別を行うことにしました。 この記事ではGoogle Maps APIの活用法を私の使用例と共に解説します。また複雑な料金システムを解説したいと思います。
Google Maps APIとは自分のWEBサイトやシステムでGoogle Mapsのデータや機能を使用したいときに使えるようにするAPIで、正式名称は「Google Maps Platform」といいます。
Google Maps Platformには大きく分けて以下の3つのサービスが存在します。
Maps
自分のWEBサイトやアプリなどにGoogleの地図を表示させる時などに使用します。
様々な種類の地図を用いることができます。
Routes
二つの地点の最適なルートを提供することが可能です。
車移動や複数の目的地を通るルート検索にも対応できます。
Place
全世界2億以上のスポットの充実したデータを取得することができます。
検索補完機能でスポットを見つける助けをできると共に、位置情報やスポットの詳細情報、写真、周辺情報など得ることができます。
本記事では私が研究で使用したPlaceのサービスに焦点を当てたいと思います。
Placeのサービスにも様々なサービスが組み込まれています。それらは以下のようになっています。
Autocomplete
Geocoding
Geolocation
Place Details
Place Photos
Place Search
Time Zone
Current Place
これらの詳しい説明はここから見ることができるので、自分がやりたいこと、欲しい機能を吟味するといいでしょう。
私は上記のサービスの内、Place SearchのAPIを用いました。
Place Searchでできることについて、以下のように記述してありました。
The Places API lets you search for place information using a variety of categories, including establishments, prominent points of interest, and geographic locations. You can search for places either by proximity or a text string. A Place Search returns a list of places along with summary information about each place; additional information is available via a Place Details query.
日本語訳
Places APIを使用すると、施設、目立つスポット、地理的な場所などのさまざまなカテゴリを使用して場所情報を検索できます。場所は、周辺またはテキスト文字列で検索できます。場所検索では、場所のリストと各場所の概要情報が返されます。追加情報は、場所の詳細クエリを介して入手できます。
私はの研究では文字列(正確にはハッシュタグ)がスポットか否かを判断するのに、その文字列をクエリとしてPlace Search APIにリクエストしています。そのデータから、そういう名前の地点があるのか、推薦エリアにそのスポットが属しているのかなどを判別して推薦すべきスポットかを判別しています。
Place Search APIでは主に以下のデータが得られます。
Basic
住所
運営状況
名前
ID
タイプ
URL
緯度経度
アイコン etc
Contact
電話番号
営業時間
ウェブサイト
Atmosphere
価格帯
評価
口コミ
総合評価
これらの情報の他にも、Place PhotoやPlace Detailsを利用することでより多くの多様な情報を取得することができます。
またPlace Search APIに関してもさらに以下の3つのタイプにサービスが分かれています。
Find Placeはテキスト入力を受け取り、特定の場所1つを返します。その際、入力には名前や住所、電話番号などの様々な種類のデータを指定できます。Nearby SearchとText Searchでは得られるデータの種類を制限する方法は無いため、不要なデータをリクエストしないようにするためにFind Placeを代わりに用います。
Basic、Contact、Atmosphereの中から必要な情報をリクエストに埋め込むことで情報を取得できます。
Nearby Searchでは指定したエリア内の場所を検索できます。キーワードか検索する場所のタイプを指定することで検索リクエストを絞り込めます。
Basic、Contact、Atmosphere全てのデータを返します。
Text Searchでは入力される文字列に基づいて一致する場所のリストを返します。したがって、自動化されたシステムで曖昧な住所クエリを作成するのに役立ちます。
Basic、Contact、Atmosphere全てのデータを返します。
私の場合、スポットか否かを判断するだけだったので、Find PLaceを用いてBasicデータの”住所”、”名前”、”ID”、”緯度経度”を取得し、無駄なデータを取得しないようにしました。
住所は得られた結果が推薦エリア内に存在するものかを判断し、あまりに遠いスポットを推薦しないようにしました。
名前はクエリと比較し、同一のスポットを示しているかを判断しました。
Find Placeでは違うクエリでも同じスポットを返すことがあったため、IDを用いて同一かどうかを判断しました。
緯度軽度はスポット間の距離を求めるために用いました。
Place Search APIの利用料金は使用するサービスと取得するデータの種類、リクエスト回数によって変化します。
それらをまとめた表が以下になります。
0-100,000 | 100,001-500,000 | 500,001- | |
---|---|---|---|
Find Place | $0.017 | $0.0136 | 問い合わせ |
Nearby Search | $0.032 | $0.0256 | 問い合わせ |
Text Search | $0.032 | $0.0256 | 問い合わせ |
Basic Data | $0 | $0 | $0 |
Contact Data | $0.003 | $0.0024 | 問い合わせ |
Atomosphere Data | $0.005 | $0.004 | 問い合わせ |
またFind PlaceでIDのみでリクエストを行うと、Find Placeの基本料金を払わずに、$0でIDを取得できます。
ここで注目したいのが、値段です。上記の説明などからわかるように、Find Placeでは一つのスポットしか返さないので、いくつも店舗があるスポットや似た名前のスポットなどを取得したい場合、得たい結果を得られない可能性がある。したがって精度を上げるならText Searchを用いて一致するスポットをリストで取得した方が良い。
しかしながら値段表を見ると、Find PlaceとText Searchで値段が2倍以上違うことがわかる。また取得したいデータはBasic Dataで十分であるがいらないデータまで取得して課金されている。
Nearby SearchとText Searchは全てのデータを自動で取得するので最低でも$0.04かかってしまう。
以上のようにGoogle Maps Platformでは使うサービス、取得するデータによってサービスが細分化されていると共に、それぞれかかる料金が異なります。自分の欲しい機能、データが何なのかを明確にした上で最適なものを選ぶ必要があるため、難しいと思います。 私と同じようなデータが欲しい人は是非この記事を参考にして欲しいです。
また最後になりましたが、Google Maps Platformには利用額の上限を設定して、その上限を越えそうな時に通知する機能はありますが、自動で止まることはありません。そして、利用料金の反映には体感1日ほどのラグがあります。 プログラム内で無限ループに陥ってリクエストを送り続けたり、大量のデータを処理するのに用いると後日の請求で痛い目を見ることになってしまうので、そうならないように気をつけてください。
参考:
- https://mapsplatform.google.com/intl/ja/products/