Open zerebom opened 3 years ago
A. Nearby Search requests
を使用すれば行える。
https://developers.google.com/maps/documentation/places/web-service/search#find-place-examples
gcpの場所検索で使用できるAPIはFind Place requests
と Nearby Search requests
がある。
ある位置情報を中心にその周辺地域で検索する場合は検索結果が複数帰ってくるNearby Search
を使う。
しかし、Nearby Search
はfiledsによる絞り込みができないため少数回使用しただけで、API使用制限に引っかかってしまう可能性が高い。
以下のように検索ができる。
place_result = client.places_nearby(
location=loc,
radius=5000,
type='food',
language='ja',
keyword='ラーメン')
place_resultに各店舗データが格納されている。 Google mapを触った感じ、radiusが大きくなると、キーワードから少しずれたデータは欠損してしまうみたい。
広域での検索
より寄った検索
今まで、全然つくばのラーメン屋がヒットしてなかったのは、radius=20000
にしていたため。
すごく広域のデータが格納されていたが、漏れだらけだった。
以下のように工夫をこらす。
決め打ちだけど、半径3km以内の店舗を検索するようにする。 そして、現在位置と半径検索が1.5km以内だったら(面積換算で)7割のデータは被るので検索は行わない。
半径3km同士の円の面積が被る割合。横軸が円の中心の距離。縦軸がかぶっている面積比率。 参考: https://tjkendev.github.io/procon-library/python/geometry/circles_intersection_area.html
現在位置とすべての位置履歴の距離を ヒュベニの公式というので緯度経度→距離に直す。 その後、最も近い位置履歴が1.5km以内ならそのデータを返すようにする O(N)の計算量なので、位置履歴が溜まってきたら別途方法を考える。
https://www.gis-py.com/entry/py-latlon2distance
Railsのデフォルト機能とPythonのgcp クライアントを両方使うために、以下のような構成にする
前提: サーバー内部にgcp, DB間のデータフローを司るPythonサーバーを立てておく
調査中
概要
つくめんからちかめんに変更する場合、ユーザーの現在地に沿ってデータを表示する必要がある。 これを実現するAPIには以下の種類がある。
GCPのAPI利用制限的に、3を実装したい。
3を実装する上での現状の課題
次のアクション
Python APIサーバーの作成-> Railsに移行その他課題