OpenStreetMap logo OpenStreetMap

Piebroさんが作成したOpenStreetMap Statisticsを知っていますか?

OSMのchangesetファイルを分析して、様々な角度からグラフを作成してくれるとても有益なツールです。

user_statistics_japan

プロジェクトのREADMEでも、それぞれの国や地域を対象に分析を実施することができる、と示されています。 私のローカル環境で、日本地域を対象にした分析を行うことができたので、手順をまとめておきます。

region_japan

私の環境

  • 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さんのリポジトリになっています。修正して自分のリポジトリにアップロードするようにしてください。

Email icon Bluesky Icon Facebook Icon LinkedIn Icon Mastodon Icon Telegram Icon X Icon

Discussion

Log in to leave a comment