Places APIとは
任意の場所の詳細情報(緯度・経度や名称、住所など)を検索できます。名称のオートコンプリートや、周辺の建物の検索なんかもできたりします。
GoogleMaps — GoogleMaps v0.11.0
Pythonで周辺建物を検索してみた
以下のpythonモジュールを使用しました。
pipで簡単にインストールできます。
pip install -U googlemaps
ライブラリの使いかはこちらを参考にしました。
周辺の建物を検索するには「Places API Nearby Search」というサービスを使います。
ソースコードは以下。language='ja'
と指定しないと、名称がアルファベットで出力されちゃうので注意。
import googlemaps import pprint key = 'XXXXXXXXXXXXXXXXXXXX' client = googlemaps.Client(key) loc = {'lat': 35.466589, 'lng': 139.612761} place_result = client.places_nearby( location=loc, radius=50, language='ja') pprint.pprint(place_result)
結果はこんな感じです。(一部省略してあります。)
{'html_attributions': [], 'next_page_token': 'xxx', 'results': [{'geometry': {'location': {'lat': 35.4663647, 'lng': 139.6129279}, 'viewport': {'northeast': {'lat': 35.4677136302915, 'lng': 139.6142768802915}, 'southwest': {'lat': 35.4650156697085, 'lng': 139.6115789197085}}}, 'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png', 'id': 'aeca9886685761003f01d78a4fa4c10491a8be2e', 'name': '旧東海道', 'place_id': 'ChIJLbxC5AhcGGARkY38u0Tqeas', 'reference': 'ChIJLbxC5AhcGGARkY38u0Tqeas', 'scope': 'GOOGLE', 'types': ['route'], 'vicinity': '楠町'}, {'geometry': {'location': {'lat': 35.4663889, 'lng': 139.6125689}, 'viewport': {'northeast': {'lat': 35.4677378802915, 'lng': 139.6139178802915}, 'southwest': {'lat': 35.4650399197085, 'lng': 139.6112199197085}}}, 'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png', 'id': '0a68a2bc20ac9b5fa4e39de3242f3576acfadae1', 'name': 'プティ ガール(petit girl)', 'place_id': 'ChIJ1YKR-ghcGGAROC-fh0ieLPA', 'plus_code': {'compound_code': 'FJ87+H2 日本、神奈川県 横浜市', 'global_code': '8Q7XFJ87+H2'}, 'reference': 'ChIJ1YKR-ghcGGAROC-fh0ieLPA', 'scope': 'GOOGLE', 'types': ['point_of_interest', 'establishment'], 'vicinity': '横浜市西区楠町5−16 横浜コーヨー十番館102'}, {'geometry': {'location': {'lat': 35.4663939, 'lng': 139.6124014}, 'viewport': {'northeast': {'lat': 35.46772748029149, 'lng': 139.6137440802915}, 'southwest': {'lat': 35.46502951970849, 'lng': 139.6110461197085}}}, 'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png', 'id': '9450d962e044233a02bbbf3e33b84f2032bc7c77', 'name': '萬進楼', 'opening_hours': {'open_now': False}, 'photos': [{'height': 1152, 'html_attributions': ['<a ' 'href="https://maps.google.com/maps/contrib/101751152504650295458/photos">Fukushima ' 'Yasuo</a>'], 'photo_reference': 'CmRaAAAAPLBsLNUYV1gsUdBd5Mrp0tt93FdXTCU3Omsdp3v0D0KRz_XGIM36VP_rKhz_5VHskert10P8s42_6Of0RW0FoCbrL_z7vOZLbkqq7IWV8G1Klkdmdj9H4o3NYH6d7K2nEhAVJnI4GcINkj3Av-KU0aHXGhTV2Ow5GhCxZVduTKYqURBJkuNRiw', 'width': 2048}], 'place_id': 'ChIJ-9XA9ghcGGARniXT049qEt4', 'plus_code': {'compound_code': 'FJ86+HX 日本、神奈川県 横浜市', 'global_code': '8Q7XFJ86+HX'}, 'rating': 3.8, 'reference': 'ChIJ-9XA9ghcGGARniXT049qEt4', 'scope': 'GOOGLE', 'types': ['restaurant', 'food', 'point_of_interest', 'establishment'], 'user_ratings_total': 17, 'vicinity': '横浜市西区楠町17−10'}, {'geometry': {'location': {'lat': 35.466927, 'lng': 139.612583}, 'viewport': {'northeast': {'lat': 35.4682594802915, 'lng': 139.6139772302915}, 'southwest': {'lat': 35.4655615197085, 'lng': 139.6112792697085}}}, 'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/shopping-71.png', 'id': 'f4730a3b53b3660d0b8f82e4bbba7d7fff7c67a7', 'name': 'ポーラ化粧品横浜西口営業支店', 'place_id': 'ChIJh-Hv8ghcGGARPMI8OPmzhqs', 'plus_code': {'compound_code': 'FJ87+Q2 日本、神奈川県 横浜市', 'global_code': '8Q7XFJ87+Q2'}, 'reference': 'ChIJh-Hv8ghcGGARPMI8OPmzhqs', 'scope': 'GOOGLE', 'types': ['store', 'point_of_interest', 'establishment'], 'vicinity': '横浜市西区楠町17−4'}, {'geometry': {'location': {'lat': 35.4668692, 'lng': 139.6130542}, 'viewport': {'northeast': {'lat': 35.46826093029149, 'lng': 139.6144353802915}, 'southwest': {'lat': 35.46556296970849, 'lng': 139.6117374197085}}}, 'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png', 'id': '85b3712965a3932404e956d0a4c4c5bb249188d3', 'name': '横浜南幸駐輪場', 'opening_hours': {'open_now': True}, 'photos': [{'height': 2448, 'html_attributions': ['<a ' 'href="https://maps.google.com/maps/contrib/108784195876784182303/photos">バーン</a>'], 'photo_reference': 'CmRaAAAAY46xCh0SOBHzMYQ1GD4grsNIsmSKe71qv79k48letMiGNSxNIbrMH6u0D14gGx97TenmqHKmz7FKCZdhrcqocznPvyNRzI5uoBRaRocrXTwJB0CYN8t-9LjKCG1z4iMiEhCGCi9iMhYBA-UnziVcuV1CGhSbrtiulRgcg4xpKyI_Nu0GFX5Q2A', 'width': 3264}], 'place_id': 'ChIJWXOlTMddGGARfAKOfka3cIE', 'plus_code': {'compound_code': 'FJ87+P6 日本、神奈川県 横浜市', 'global_code': '8Q7XFJ87+P6'}, 'reference': 'ChIJWXOlTMddGGARfAKOfka3cIE', 'scope': 'GOOGLE', 'types': ['parking', 'point_of_interest', 'establishment'], 'vicinity': '横浜市西区南幸2丁目12−1'}, ...省略...], 'status': 'OK'}
駐輪場の情報も抽出できており、かなり細かいレベルまで検索できていることがわかります。
価格は?
2019年7月15日現在、以下のページで価格が定義されています。Places - Nearby Searchは、5000リクエストまでなら無料のようです。
検索エリアの半径を変えると?
上のコードでは半径50メートルの円の中を検索していました。その結果、駐車場などのかなりマイナーな情報まで得られました。しかし、半径を5000メートルのように大きくしてみるとホテルやショッピングモールといった有名な建物しか得られなくなります。
これについてGoogleサポートに問い合わせたところ、これはバグではなくGoogle API側の「意図した挙動」であると回答をいただきました。半径5000メートル内のマイナーな建物を検索するには、ちょっと工夫が要りそうです。
半径ってどうやって測ってるの?
半径の定義もGoogleサポートに問い合わせてみました。すると、半径r
としたとき、メルカトル図法上で半径r
の円を描き、その円の中に存在する場所情報を、ある程度有名なものに絞って返しているそうです。「正射影図法じゃなくてメルカトル図法なんですか?」って聞き直したら、「そうです」とのこと。へーーー勉強になりました。
本日は、Google mapのPlaces APIで周辺の建物を検索する方法をご紹介しました。良い記事だと思っていただいた方は、以下の「★+」ボタンのクリック、SNSでのシェア、「読者になる」ボタンのクリックをお願いします。