LoginSignup
42
38

Pythonでジオコーディング(Geocoder/Googlemaps)

Last updated at Posted at 2019-07-29

はじめに

以下の投稿で、場所の名称から緯度経度の情報を取得することをしました(JavaScript)

Pythonライブラリを使用し、より簡単に複数の場所の緯度経度を取得してみたいと思います。今回使用するのは、Geocoder/OpenStreetMap と Googlemapsです。

前提

Google Maps API keyの取得

環境

python 3.7

インストール
$pip install geocoder
$pip install googlemaps

やったこと・コード

①Pythonでジオコーディング(Geocoder/OpenStreetMap)

geo01.py
import geocoder

place = '清水寺'
ret = geocoder.osm(place, timeout=5.0)
print(place, ret.latlng)
清水寺 [34.994303, 135.784438886419]

複数の場所をローカルのtxtファイルからアップロードして、結果を見てみる

geo02.py
import geocoder
import csv

with open("./mylist1.txt", "r", encoding="utf-8_sig") as f:
    reader = csv.reader(f, delimiter='\t')
    for row in reader:
        print(row[0])
        ret = geocoder.osm(row[0], timeout=5.0)
        print(ret.latlng)
アマゾン川
[43.197963, 141.771885]
アマルフィ海岸
[35.7728747, 139.519887]
アルダブラ環礁
None
アルベロベッロのトゥルッリ
None
アンコールワット
[13.41249965, 103.866569373055]
アンダルシアのひまわり畑
None
アンテロープ・キャニオン
None
アンナプルナ
[34.47401005, 133.30666803559]
イースター島
[-27.12595935, -109.349576422058]
イエローストーン国立公園
None
イエローナイフのオーロラ
None
イグアスの滝
[-25.73602815, -54.4746500826546]
  • OpenStreetMapでは、結果がとれない、結果がとれていても精度がよくなかったです。
  • 同じ内容をgooglemapsでもやってみようと思います。

②Pythonでジオコーディング(Googlemaps)

geo03.py
import googlemaps
import csv
import time

googleapikey = 'API keyを設定する'
gmaps = googlemaps.Client(key=googleapikey)

with open("./mylist1.txt", "r", encoding="utf-8_sig") as f:
    reader = csv.reader(f, delimiter='\t')
    for row in reader:
        print(row[0])
        result = gmaps.geocode(row[0])
        lat = result[0]["geometry"]["location"]["lat"]
        lng = result[0]["geometry"]["location"]["lng"]
        print (lat,lng)
        time.sleep(0.5)
アマゾン川
-3.2996216 -60.6646509
アマルフィ海岸
40.6333389 14.6028963
アルダブラ環礁
-9.4236984 46.3432781
アルベロベッロのトゥルッリ
40.7826344 17.2363428
アンコールワット
13.4124693 103.8669857
アンダルシアのひまわり畑
37.5442706 -4.7277528
アンテロープ・キャニオン
36.8619103 -111.3743302
アンナプルナ
28.596111 83.820278
イースター島
-27.112723 -109.3496865
イエローストーン国立公園
44.427963 -110.588455
イエローナイフのオーロラ
62.4551975 -114.3688018
イグアスの滝
-25.695259 -54.4366662
  • OpenStreetMapよりも結果の取得、取れた結果の精度、ともに上回りました。
  • ただ、Googlemapsでは、ジオコーディングを短時間に実施するとエラーになりましたので、すこし時間を開けています。

まとめ

  • pythonライブラリを使用するととても簡単にジオコーディングできることがわかりました。
  • 以下の投稿で、場所のピン打ちをしていますが、緯度経度情報がなく、場所名称しかわからない場合は、ジオコーディングが有効ですが、「緯度経度を算出すること」と「地図への表示」はプログラムをわけることもありかとも思いました。

参考URL

  • Geocodeing API

  • Python 製ジオコーディングライブラリ Geocoder を試す

42
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
38