Skip to content

Repository files navigation

geo-puzzle — 都道府県 3D 市区町村パズル生成ツール

任意の都道府県の市区町村地形パズル(3D プリント用 STL)を生成する汎用ツールです。 tokyo-puzzle を全都道府県対応に汎用化したものです。

国土交通省の行政界データ(N03)と国土地理院の標高データ(DEM)から、

  • 市区町村ピース: 地形の起伏付き・裏面に市区町村名を浮き彫り
  • 枠(フレーム): ピースをはめ込むトレイ。市区町村境界線が 0.5mm 盛り上がったガイド付き。プリントベッドに収まるよう自動分割され、タブ/スロットで接続

を生成し、Next.js 製のサイトで配布できます。

使い方

npm install
pip install numpy Pillow

# 都道府県コード(01〜47)を指定して一括生成
npm run generate -- 13     # 東京都
npm run generate -- 19     # 山梨県

# 開発サーバー起動
npm run dev

npm run generate は以下の 3 ステップをまとめて実行します。個別にも実行できます。

npm run data:fetch -- 13               # 1. 行政界 GeoJSON をダウンロード
python3 scripts/gen_stl.py 13          # 2. 市区町村ピース STL を生成(数十分かかります)
python3 scripts/gen_frame.py 13        # 3. 枠 STL を生成

ピースは 1 市区町村ずつ生成することもできます:

python3 scripts/gen_stl.py 13 13101    # 千代田区のみ

自動計算される項目

tokyo-puzzle でハードコードされていた以下の項目は、境界データからすべて自動計算されます。

項目 計算方法
市区町村一覧 N03 データの行政区域コード(N03_007)から自動抽出
投影中心 全市区町村の bbox 中心
スケール パズル全体の長辺が targetSizeMm(既定 400mm)になるよう決定
DEM ズームレベル 目標解像度 detailMm(既定 0.25mm)から市区町村ごとに選択
フレーム分割数 全体幅 ÷ maxSectionWidthMm(既定 185mm)の切り上げ
飛び地・離島 各市区町村の面積最大の連結成分のみ採用

都道府県別設定(config/{都道府県コード}.json)

省略可能。例(config/13.json — 東京都の島嶼部を除外):

{
  "excludeCodes": ["13361", "13362", "13363", "13364", "13381", "13382", "13401", "13402", "13421"]
}
キー 既定値 説明
targetSizeMm 400 パズル全体の長辺サイズ (mm)
maxSectionWidthMm 185 フレーム 1 セクションの最大幅 (mm)
detailMm 0.25 ピース表面の目標解像度 (mm)。細かくするとデータ量が二乗で増える
zScale 1.0 高さ方向の倍率(平野部の多い県は 2〜3 に上げると立体感が出ます)
baseThickMm 3.0 ピースのベース厚さ (mm)
pieceClearanceMm 0.3 ピース外周の収縮量 (mm)
frameClearanceMm 0.3 フレームポケットの拡張量 (mm)
excludeCodes [] 除外する市区町村コード(離島など)
keepAllPartsCodes [] 飛び地・離島をすべて残す市区町村コード
n03Year 2024 使用する N03 データの年度

注意事項

  • 南北に長い都道府県は、フレームは横方向にしか分割されないため、セクションの高さがプリントベッドを超える場合があります。その場合は targetSizeMm を小さくしてください。
  • 離島で構成される市区町村は既定で最大の島のみが採用されます。全島を残す場合は keepAllPartsCodes に指定してください(ピースが複数の分離したパーツになります)。

出力ファイル

public/data/index.json                  生成済み都道府県一覧
public/data/{pref}/manifest.json        市区町村一覧
public/data/{pref}/boundary/{code}.json 境界 GeoJSON
public/data/{pref}/stl/{code}.stl       市区町村ピース
public/data/{pref}/stl/frame_N.stl      フレーム
public/data/{pref}/frames.json          フレーム一覧
.cache/dem/                             DEM タイルキャッシュ(都道府県間で共有)

CI/CD

main への push で GitHub Actions がデータ生成・ビルド・GitHub Pages デプロイを実行します。 ビルド対象の都道府県は .github/workflows/deploy.ymlPREFECTURES 環境変数で指定します。

データソース

データ 提供元 ライセンス
行政界 国土交通省 国土数値情報 N03 国土数値情報利用規約
標高 DEM 国土地理院 基盤地図情報数値標高モデル 測量法に基づく国土地理院長承認

本データは上記データを加工して作成したものです。

Releases

Packages

Contributors

Languages