| [サイトマップへ] |
先人に感謝
キーワード: OpenStreetMap, Python, overpy, 地図データダウンロード, ポイント, ライン, エリア, タグ
前準備として,Anaconda のインストールが終わっていること. 手順を下に説明しています.
Python 3 の開発環境である Anacondaをおすすめ.Window でのインストール手順は次の通りです(Linuxでも同様の手順です).
※ Linux のときは,端末を開く(pyenvを使っているときは pip の実行に管理者権限を必要としない)
pip install --ignore-installed --upgrade overpy
バージョン番号が表示されれば OK
conda list overpy
※ 「conda install -y -c conda-forge folium」ではなくて, GitHub からソースコードをダウンロードしてインストールしたい場合
起動は,Windows のメニューで「Visual Studio 2017」の下の「VS 2017用 x64 Native Tools コマンドプロンプト」のように操作する.
python -m pip instal --upgrade pip pip install git+https://github.com/DinoTools/python-overpy
エラーメッセージが出ていないことを確認
バージョン番号が表示されれば OK
conda list overpy
あとでデータをダウンロードするときのために,Google Map を使って緯度・経度を調べてみる
Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.
次の Python プログラムを実行
※さきほど調べた緯度と経度
(実行例)
lat = 34.4461 lon = 133.2315
OpenStreetMapの「ライン」のデータのうち,「highway」であるようなデータが欲しいとする. OpenStreetMap には,ポイントやラインやエリアには,「highway」のようなタグ付いている.
引き続き、次の Python プログラムを実行
type = 'highway'
※ OpenStreetMapもタイル地図だが,次のプログラムでは,最下位のレイヤ(もっとも詳細なレイヤ)からダウンロードされる
次の Python プログラムを実行
import overpy
api = overpy.Overpass()
result = api.query("""
way(%f, %f, %f, %f) [%s];
(._;>;);
out body;
""" % (lat - 0.01, lon - 0.01, lat + 0.01, lon + 0.01, type) )
for way in result.ways:
print("Name: %s" % way.tags.get("name", "n/a"))
print(" Highway: %s" % way.tags.get("highway", "n/a"))
print(" Nodes:")
for node in way.nodes:
print(" Lat: %f, Lon: %f" % (node.lat, node.lon))
表示を確認.(道路がないようなところを緯度経度で指定していると表示は空になる). 道路のデータである.緯度経度が並んでいる.
次の Python プログラムを実行
result.ways
次の Python プログラムを実行
result.nodes
まとめ