グーグルマイマップで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を使わない場合
まとめ
いままで書いてきたことは、
ある地点の緯度と経度を取得する
緯度と経度からある地点を検索する
緯度と経度から地図上にプロットする
実は上記3つのことは手動であればグーグルマップにて可能です。
コメント