OpenStreetMap Statistics for your region (in Japanese)
Posted by nyampire on 18 July 2024 in Japanese (日本語).Piebroさんが作成したOpenStreetMap Statisticsを知っていますか?
OSMのchangesetファイルを分析して、様々な角度からグラフを作成してくれるとても有益なツールです。
- https://piebro.github.io/openstreetmap-statistics/
- https://github.com/piebro/openstreetmap-statistics
プロジェクトのREADMEでも、それぞれの国や地域を対象に分析を実施することができる、と示されています。 私のローカル環境で、日本地域を対象にした分析を行うことができたので、手順をまとめておきます。
私の環境
- MacOS
- python 3.9
データの準備
piebroさんのgitリポジトリをローカルへクローンします。
$ git clone https://github.com/piebro/openstreetmap-statistics.git
$ cd openstreetmap-statistics
Homebrewを使って、osmium-toolをインストール
$ brew install osmium-tool
virtual environmentの準備
$ python3 -m venv .venv
必要な依存関係をインストール
$ pip3 install -r requirement.txt
OSM変更セットファイルの入手
pirbroさんのREADMEではtorrentを使っています。
torrentのほうがネットワーク負荷は低いはずなので、可能ならばそちらを使ったほうがよいでしょう。
$ rm $(ls *.osm.bz2)
$ wget -N https://planet.openstreetmap.org/planet/changesets-latest.osm.bz2
対象地域のpolyファイルを入手
Geofabrikのサイトから、対象地域のpolyファイルをダウンロードします。
$ wget -N https://download.geofabrik.de/asia/japan.poly
変更セットファイルの切り出し
polyファイルを利用して、changeset-latestファイルから対象地域を切り出します。
切り出しには以下のスクリプトを使ってください。(Claudeに書いてもらいました)
https://gist.github.com/nyampire/57360f29be2bff4d74d94e3c5bfa3237
shapely1.8.0のインストール。
最新版の 2.0以降だと、依存するソフトが対応しないようです。
$ pip3 install shapely 1.8.0
$ wget -N https://gist.githubusercontent.com/nyampire/57360f29be2bff4d74d94e3c5bfa3237/raw/1fa9ded4126b3282af273469225407847cb38ee7/parse-latest.py
$ python3 parse-latest.py [poly.filename] [input.filename] [output.filename]
$ (sample) python3 parse-latest.py japan.poly changesets-latest.osm.bz2 japan-chansegets.osm.bz2
スクリプトの処理の結果として、この例の場合であれば japan-changesets.osm.bz2 が出力されます。
Notebook用ファイルの生成
続く処理はPiebroさんの手順と同様です。
pvコマンドはあくまでも進捗状況の把握のために使われているため、私は省略しました。
$ rm -r -d temp
$ osmium cat --output-format opl output.osm.bz2 | python3 src/changeset_to_parquet.py temp
$ python3 src/parquet_to_json_stats.py temp
Notebookの更新
ターミナルで以下を実行します。
シェルスクリプトにしてKickしてもよいですが、シェルにそのまま貼り付けても動きます。
for notebook in $(find src/questions -name calculations.ipynb); do
jupyter nbconvert --to notebook --execute "$notebook" --output calculations.ipynb
done
ローカルサーバの起動
ローカルでhttpサーバを起動して確認します。
httpサーバを起動しないと、CORSの関係でグラフが表示できません。
python -m http.server 1010
ブラウザから “http://localhost:1010” へアクセスすると、グラフが表示されます。
なお、httpサーバを起動する代わりに、gitの個人リポジトリ等にPushして、gh-pagesから確認することも可能のはずです。
ただし、これまでの手順だと、remoteがpiebroさんのリポジトリになっています。修正して自分のリポジトリにアップロードするようにしてください。
Discussion