Pythonで地名から住所と座標を割り出すジオコーディングを試してみる

shimakaze_soft
shimakaze-soft-techblog
6 min readJan 11, 2020

2020年新年最初の投稿です

色々とPython製のライブラリについて調べていたら、仕事でも使えそうなライブラリを見つけたので、今回はそれを試してみます。

地名から座標を割り出す

今回はジオコーディングの一種でもある地名や住所から座標を割り出してくれるPython Geocoderというのを使っていきます。Geocoderというものは、多言語にもあるライブラリだそうです。

Geocoderの特徴は、複数のマップサービスのAPIを統一されたスキーマや文法などで代わりに呼び出してくれます。

約30個近くのマップサービスに対応しており、GeocoderからGoogleMap、OpenStreetMapとあらゆるマップサービスからマップの情報を引き出してくれます。

ちなみにGoogleMapなどはAPI Keyが必要ですが、API Keyを設定していなくても、API Key不要なOpenStreetMapなどからAPIで情報を引き出してくれるので、特になんの設定をしなくてもそれなりの情報を引き出せます。

インストール

まずはpip経由でgeocoderをインストールします。

$ pip install geocoder

地名や住所から緯度経度を割り出す

それでは実際に地名から緯度経度を割り出してみます。OpenStreetMapから情報を引き出します。

>>> import geocoder>>> location = 'フジテレビ'
>>> ret = geocoder.osm(location, timeout=5.0)
>>> ret.latlng
[35.6267985, 139.7745652194094]

フジテレビという地名から実際に座標がリストで取得できます。

実際にGoogleMapで検索をかけてみると以下が表示されるので、ちゃんとフジテレビの緯度経度が当たっています。

以下のように.address、.cityなどを打ち込むと住所や地域なども割り出すことができます。

>>> ret.address
'フジテレビ, 8, 首都高速湾岸線, 台場2, 東八潮, 品川区, 東京都, 137-8088, 日本 (Japan)'
>>> ret.country
'日本 (Japan)'
>>> ret.state
'東京都'
>>> ret.city
'品川区'

上のaddressの情報を元に住所からも検索をかけてみます。

>>> address = '東京都港区台場2-8'
>>> ret = geocoder.osm(address, timeout=5.0)
>>> ret.latlng
[35.6278224, 139.7765112902792]

フジテレビという逆引きはできませんでしたが、座標を取り出すことには成功しています。

josn形式で情報を取得する

json形式でも情報を取り出すことができます。

>>> location = 'フジテレビ'
>>> ret = geocoder.osm(location, timeout=5.0)
>>> ret.ok
True
(情報を取得できているフラグ)
>>> ret.json
{'accuracy': 0.7693138403968539, 'address': 'フジテレビ, 8, 首都高速湾岸線, 台場2, 東八潮, 品川区, 東京都, 137-8088, 日本 (Japan)', 'bbox': {'northeast': [35.6275781, 139.7754924], 'southwest': [35.6259412, 139.773009]}, 'city': '品川区', 'confidence': 9, 'country': '日本 (Japan)', 'country_code': 'jp', 'district': '東八潮', 'housenumber': '8', 'icon': 'https://nominatim.openstreetmap.org/images/mapicons/tourist_art_gallery2.p.20.png', 'importance': 0.7693138403968539, 'lat': 35.6267985, 'lng': 139.7745652194094, 'ok': True, 'osm_id': 287770734, 'osm_type': 'way', 'place_id': 155515962, 'place_rank': 30, 'postal': '137-8088', 'quality': 'artwork', 'raw': {'place_id': 155515962, 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright', 'osm_type': 'way', 'osm_id': 287770734, 'boundingbox': ['35.6259412', '35.6275781', '139.773009', '139.7754924'], 'lat': '35.6267985', 'lon': '139.7745652194094', 'display_name': 'フジテレビ, 8, 首都高速湾岸線, 台場2, 東八潮, 品川区, 東京都, 137-8088, 日本 (Japan)', 'place_rank': 30, 'category': 'tourism', 'type': 'artwork', 'importance': 0.7693138403968539, 'icon': 'https://nominatim.openstreetmap.org/images/mapicons/tourist_art_gallery2.p.20.png', 'address': {'artwork': 'フジテレビ', 'house_number': '8', 'road': '首都高速湾岸線', 'suburb': '台場2', 'city_district': '東八潮', 'city': '品川区', 'state': '東京都', 'postcode': '137-8088', 'country': '日本 (Japan)', 'country_code': 'jp'}}, 'region': '東京都', 'state': '東京都', 'status': 'OK', 'street': '首都高速湾岸線', 'suburb': '台場2', 'type': 'artwork'}

今の所それほど使っているものではありませんが、営業などが取引先の情報を打ち込むときとかの補助的なものとして使うかもしれません。

--

--

shimakaze_soft
shimakaze-soft-techblog

普段はPythonを書いていて、バックエンドをメインとしているエンジニアです。インフラなどの業務もやっています。Noteでも記事を書いています。https://note.mu/shimakaze_soft https://github.com/shimakaze-git