GIS奮闘記

元GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

geopyを使ってジオコーディングをしてみよう

さて、本日はgeopyを使ってジオコーディングをしてみようと思います。

f:id:sanvarie:20181019110343p:plain

geopyとは

ジオコーディング用のPythonライブラリですね。GIS系のPythonライブラリではかなりメジャーです。ジオコーディングとは?という方は以下のエントリーをご参照ください。
www.gis-py.com

インストール

pip install geopy でOKです。

サンプルコード

東京都庁をジオコーディングしてみようと思います。

# -*- coding: utf-8 -*-
from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="test")
location = geolocator.geocode(u"東京都庁")

print(location.address)       #住所
print(location.latitude)      #緯度
print(location.longitude)     #経度
print(location.raw)           #ジオコーディングした結果の全ての情報

簡単ですね。最後のlocation.rawはジオコーディングした結果の全ての情報が格納されています。非常に便利です。

f:id:sanvarie:20181019104542p:plain

pandasとの連携

pandasのデータフレームにデータを格納することもできます。pandasについては以下エントリーで紹介しています。興味のある方はぜひ読んでみてください。

www.gis-py.com

www.gis-py.com

サンプルコード

東京、大阪、福岡のジオコーディング結果をpandasのデータフレームに格納するサンプルです。

# -*- coding: utf-8 -*-
import pandas as pd
df = pd.DataFrame({'name': [u'東京', u'大阪', u'福岡']})

from geopy.geocoders import Nominatim
geolocator = Nominatim()

from geopy.extra.rate_limiter import RateLimiter
geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)
df['location'] = df['name'].apply(geocode)

df['point'] = df['location'].apply(lambda loc: tuple(loc.point) if loc else None)

print df['location']
print ""
print df['point']

これも簡単にできました。

f:id:sanvarie:20181019105307p:plain

ジオコーディングするなら鉄板のライブラリですので、興味のある方はぜひ使ってみてください。