Ccmmutty logo
Commutty IT
4 min read

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

https://cdn.magicode.io/media/notebox/ea66cfc3-6061-444a-b73c-5bfd07d66bf6.jpeg

はじめに

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

前提

Google Maps API keyの取得

環境

python 3.7
インストール
  • $pip install geocoder
  • $pip install googlemaps

やったこと・コード

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

import geocoder

place = '清水寺'
ret = geocoder.osm(place, timeout=5.0)
print(place, ret.latlng)
結果
清水寺 [34.994303, 135.784438886419]
複数の場所をローカルのtxtファイルからアップロードして、結果を見てみる
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)

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

Discussion

コメントにはログインが必要です。