一覧に戻る

日本の地域メッシュを生成するPythonモジュールを公開しました

#Python#Rust#GIS#foss4g

更新情報

2020/11/23

  • 5mメッシュへの対応
  • 別称は250, 125...から、250m, 125m...に変更

2020/09/04

以下の2点が修正されました。この事で、一部互換性が失われた箇所があります(コード規則、メッシュ番号)。詳しくはリポジトリのREADMEをご覧ください。

  • 100m、10mメッシュへの対応
  • 分割地域メッシュのコード割り振り規則の見直し(@warenashiさんありがとうございました)

TL;DR

https://github.com/MIERUNE/japan-mesh-tool

  • 日本の標準地域メッシュを生成するPythonモジュールをOSSとして公開しました
  • 50mまでのよく使われる単位のメッシュを生成出来ます
  • 試験的に作成したRust版も含みます

標準地域メッシュとは?

地域メッシュ(ちいきメッシュ)とは、統計に利用するために、緯度・経度に基づいて地域をほぼ同じ大きさの網の目(メッシュ)に分けたものである。メッシュを識別するためのコードを地域メッシュコードと言う。 地域メッシュ - Wikipedia

公開する理由

  • 地域メッシュを50mまで生成出来て手軽に使えるOSSはなさそうだったので
  • 様々な機会で地域メッシュが必要になるケースは多く、様々な方がその都度開発していると思われるので

japan-mesh-tool

https://github.com/MIERUNE/japan-mesh-tool MITライセンスのもと頒布します。

実行環境

  • Python3.8で開発(3系なら動くと思います)
  • 標準モジュールのみを使用しています(依存なし)

機能

①メッシュ次数②領域(経緯度)から、メッシュデータをgeojsonl形式で出力します。 geojsonl形式:geojsonをFeature単位で行区切りしたテキストファイル、GeoJSONSeqとも言う

対応メッシュ次数

次数別称詳細メッシュコード
1-80kmメッシュ4桁
2-10kmメッシュ6桁
3-1kmメッシュ8桁
4500500mメッシュ10桁
5250250mメッシュ12桁
6125125mメッシュ14桁
75050mメッシュ14桁

使い方(Python)

python python/japanmesh/main.py <meshnum:メッシュ次数> <-e:領域指定、"カンマ区切り経緯度 カンマ区切り経緯度"形式で指定> <-d:保存先>

コマンド例

python python/japanmesh/main.py 5 -e 142.2,44.0 142.3,44.5 -d ./

4次メッシュ以上は別称で指定する事が出来ます

python python/japanmesh/main.py 250 -e 142.2,44.0 142.3,44.5 -d ./

領域、保存先は省略可能です。 その場合、全国分の1次メッシュをカレントディレクトリに出力します。

python python/japanmesh/main.py 1

3次メッシュ以上は総メッシュ数が膨大なので、大きい領域を指定すると処理に時間がかかります。

使い方(Rust, 試験的)

処理速度改善のため、試験的にRustで同じ処理を書きました。rust/japanmeshがコンパイル済みのバイナリです(Windowsはrust/japanmesh.exe)。

rust/japanmesh <meshnum:メッシュ次数> <領域指定(省略可)>

常にカレントディレクトリにgeojsonlファイルを出力します。

コマンド例

macOS(64bit)

rust/japanmesh 5 142.2,44.0 142.3,44.5

または領域を省略して

rust/japanmesh 3

Pythonモジュールとして

  • ./python/japanmesh自体をPythonモジュールとしてimport可能です
  • その場合、get_meshes()関数のみを使用可能です (使用例は./python/sample.pyを参照)

メッシュの生成ルール

赤:3次、白:4次(3次を4分割)

青:5次、黒:7次(5次を25分割)

  • 3次まではhttps://www.stat.go.jp/data/mesh/pdf/gaiyo1.pdfに従う
  • 4次以降は以下のルールに基づき上位メッシュのコードに対し、末尾に2桁ずつコードを付加する(上記画像のとおり)
    • 左下を00とする
    • 上方向にひとつ進むと10、ふたつ進むと20…とする
    • 右方向にひとつ進むと01、ふたつ進むと02…とする

https://qiita.com/Kanahiro/items/0ac3ccfdaf19155ece9c