geocoding シリーズに関連して。
- 例えば"Pulau Pinang"に曖昧性はあるか
- 地名の disambiguation その1: Ajka - Drafts
- geocoding Vol.2: シウダー・ヴァルデルース - Drafts
前回「geonames に頼りすぎるの良くないなと思いました。」と書いていたので、URIに解決するのではなく、緯度経度に解決する方向で基本をおさらいしてみようと思った。
そこで、geocoder 1.8.0 : Python Package Indexを見て、試してみたら Ajka の方は一発。試したコードは以下、引数で地名を与える。
import geocoder import sys geo_str = sys.argv[1] g = geocoder.google(geo_str) print(geo_str+": "+str(g.latlng)) print(g.geojson)
google の geocoding は API 認証だと思っていたのに、Rate Limit だって書いてあるし、確かに動いちゃったのだが、
- Google Geocoding APIの制約に関するよくある誤解 - 文系プログラマによるTIPSブログ
- Google Maps Geocoding API Usage Limits | Google Maps Geocoding API | Google Developers
あたりを見るに、2500/日くらいまではこのプログラムで行けるということか。Ciudad Valdeluz の方は google だとダメ。
でも実は上のコードじゃなくてAPI Overview — geocoder 1.9.0 documentationに書いてあるように Command Line Interface があって geocode "Ciudad Valdeluz, Spain"
ってやるだけで、
{"region": "Castilla-La Mancha", "lng": -3.10888328101075, "importance": 0.4, "place_rank": "22", "quality": "residential", "state": "Castilla-La Mancha", "ok": true, "location": "Ciudad Valdeluz, Spain", "accuracy": 0.4, "provider": "osm", "place_id": "81769962", "bbox": {"southwest": [40.5823602, -3.1193332], "northeast": [40.5977205, -3.1003217]}, "status_code": 200, "confidence": 7, "osm_id": "103564909", "postal": "19141", "type": "residential", "village": "Yebes", "status": "OK", "address": "Ciudad Valdeluz, Yebes, Guadalajara, Castilla-La Mancha, 19141, Espa\u00f1a", "encoding": "utf-8", "lat": 40.5882919, "country": "Espa\u00f1a", "osm_type": "way", "county": "Guadalajara"}
という結果が Open Street Map から返ってきた。カタカナでやったらさすがに失敗。何も指定しないと osm から取得するようになっている模様。--provider bing
とか加えることで取得先を変更できる。
次回からはこういう情報も加えていきたいと思います。