先人に感謝
キーワード: OpenStreetMap, Python, overpy, 地図データダウンロード, ポイント, ライン, エリア, タグ
システム Python を使うことができる(その場合,Python のインストールは行わない)
システム Python を用いるときは,pip, setuptools の更新は次のコマンドで行う.
sudo apt -y update sudo apt -y install python3-pip python3-setuptools
Ubuntu で,システム Python 以外の Python をインストールしたい場合は pyenv が便利である: 別ページで説明している.
Python の URL: http://www.python.org/
【Python, pip の使い方】
Python, pip は,次のコマンドで起動できる.
【Python 開発環境のインストール】
JupyterLab, spyder, nteract (Python 開発環境) のインストールは, Windows でコマンドプロンプトを管理者として実行し, 次のコマンドを実行.
python -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
詳しくは,: 別ページで説明している.
JupyterLab, spyder, nteract (Python 開発環境) のインストール: : 別ページで説明している.
Windows での マイクロソフト C++ ビルドツール (Build Tools) のインストール手順: 別ページで説明している.
※ Linux のときは,端末を開く(pyenvを使っているときは pip の実行に管理者権限を必要としない)
pip install --ignore-installed --upgrade overpy
バージョン番号が表示されれば OK
pip show overpy
※ GitHub からソースコードをダウンロードしてインストールしたい場合
起動は,Windows のメニューで「Visual Studio 20..」の下の「x64 Native Tools コマンドプロンプト (x64 Native Tools Command Prompt)」を選ぶ.「x64」は,64ビット版の意味である.
Visual Studio Community のインストールを行うことで, 「x64 Native Tools コマンドプロンプト (x64 Native Tools Command Prompt)」もインストールされる.その手順は,別ページで説明している.
python -m pip install -U pip pip install git+https://github.com/DinoTools/python-overpy
エラーメッセージが出ていないことを確認
バージョン番号が表示されれば OK
pip show overpy
あとでデータをダウンロードするときのために,Google Map を使って緯度・経度を調べてみる
jupyter qtconsole
Python プログラムを動かす
開発環境や Python コンソール(Jupyter Qt Console,Spyder,PyCharm,PyScripter など)の利用も便利である.
※ 「jupyter qtconsole」を入れたのに,jupyter qtconsole が起動しない という場合には,次の操作で,インストールを行ってから,もう一度試してみる.
python -m pip install -U jupyterlab jupyter jupyter-console jupytext spyder
次の 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
まとめ