Help us understand the problem. What is going on with this article?

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

はじめに

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

参考URL

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした