python – GoogleMapsAPI ジオコーディング等の情報をまとめる

グーグルマイマップでcsvを読みこめば、マップにマーカーをプロットできますが、GoogleMapsAPIも避けては通れないかもしれません

GoogleMapsAPI周りで必要となる知識・準備など

必要となる知識

  • ジオコーディングとは: 各種情報に対して、関連する地理座標(典型的には緯度・経度)を付加すること
  • GoogleMapsAPIを使うには: 基本的にJavaScript。pythonからでもAPIをたたくと使える
  • GoogleMapsAPIの仕様変更: 仕様変更によりAPIKeyの取得が必須になった可能性がある
  • pythonで必要なモジュールの理解

ジオコーディングに関する詳しい情報は以下を参照ください。

参考 → 「ジオコーディング – Wikipedia

ジオコーディングソフトウェア

さまざまありますが主に以下のものがあるそうです。

  • Googleマップスプラットフォーム
  • YahooOpenLOCALplatform
  • BingMapsAPI
  • GeoNLPWebAPI

ジオ―コーディングソフトウェアに関する詳しい情報は以下。

参考 → 「R&Dが開発したPython用ジオコーディングツールを紹介 | 株式会社ホットリンク

準備

以下すべて Anaconda Prompt で実行

googlemapsは、緯度・経度から住所を取得するために必要

pip install googlemaps

geocoderは、住所から緯度・経度を取得

pip install geocoder

foliumは地図上に緯度・経度を指定してプロットする。

pip install folium

pythonで住所から緯度と経度を取得する

2つある。geocoderを使う方法と。使わない方法。しかしどちらのほうほうもGoogleMapsAPIを使っているのにはかわりないということ。

geocoderを使わない

geocoderを使わない方法もあるようですが割愛します。古い情報がそのまま検索結果にでてくることがあります。ひどいものはコピペで動かないものもあります。Qittaのクソ記事は消えてください。

geocoderを使う

楽勝です。

import geocoder
g = geocoder.osm('日本')
print(g.latlng)

pythonで緯度と経度から住所を取得する

先やったのとは逆で「緯度と経度」から住所を取得します。

と思ったのですが、google maps apiの使用が2018年6月あたりから有料になったそうです。有料でもapiを取得すれば、googlemapsモジュールを使えるとは思いますが今回は省略します。モジュールをインストールされてしまったならすいません。消しましょう。

しかしgeocoderモジュールを使うと一応、緯度、経度から住所を割り出すことができます。ただしこの場合は「プロバイダー依存」になります。詳しくは以下をごらんください。

参考 → 「Geocoder: Simple, Consistent — geocoder 1.38.1 documentation

サンプルコードです。

import geocoding
g = geocoder.arcgis([36.5748441, 139.2394179], method="reverse")
g = str(g)
g = g.lstrip("<[OK] Arcgis - Reverse [")
g = g.rstrip("]>")

stripを使っている理由については、自分でコードを試してみてください。

緯度・経度を指定して地図上にプロットする

foliumを使う

緯度・経度を指定して地図上にプロットするにはfoliumを使います。foliumの詳細については調べてませんので割愛します。

サンプルコードです。htmlファイルが作成されます。foliumはimportがめちゃくちゃ遅いです。

import folium, os
import webbrowser as web
lat = 35.710063
long = 139.8107
name = "東京スカイツリー"
map = folium.Map(location=[lat, long], zoom_start=18)
folium.Marker(location=[lat, long], popup=name).add_to(map)
map.save("folium.html")

web.open("C:/Users/xxxxxx/Desktop/folium.html")
input("exit?: ")
os.remove("folium.html")

foliumを使わない場合

Google Vis pythonで試みる

まとめ

いままで書いてきたことは、

ある地点の緯度と経度を取得する
緯度と経度からある地点を検索する
緯度と経度から地図上にプロットする

実は上記3つのことは手動であればグーグルマップにて可能です。


Warning: Undefined array key "thumbnail_url" in /home/users/1/boy.jp-rolpop/web/skc/wp-content/themes/godios/inc/schema-org.php on line 49

Warning: Undefined array key "thumbnail_url" in /home/users/1/boy.jp-rolpop/web/skc/wp-content/themes/godios/inc/schema-org.php on line 78