# 国土数値情報 (東京都) の GeoParquet

国土数値情報 (国土交通省) の配布 zip を、HTTP Range 要求で必要な行だけを読めるように GeoParquet に変換したもの。
対象は東京都 (都道府県コード 13) の、各データセットで最新の年のもの。
選定には mlit-nlftp の STAC カタログ (https://stac.yuiseki.net/mlit-nlftp/items.parquet) を使い、`redistribution = 'allowed'` のものだけを置いている。

## 出典の表示

国土数値情報の利用規約 (https://nlftp.mlit.go.jp/ksj/other/agreement.html) に従い、利用する際は次のように表示すること。

- 出典: 国土数値情報 (医療機関データ) (国土交通省)
- 出典: 国土数値情報 (学校データ) (国土交通省)
- 出典: 国土数値情報 (洪水浸水想定区域データ) (国土交通省)
- 出典: 国土数値情報 (500m メッシュ別将来推計人口データ (R6 国政局推計)) (国土交通省)

いずれも元の zip を GeoParquet に変換し、bbox 列を足して空間的に並べ直す加工をしている (内容の値は変えていない)。

## 置いたもの

| データセット | ファイル | 年 | 元の形式 | 行数 | 大きさ (bytes) |
|---|---|---|---|---|---|
| P04 医療機関 | [P04/P04-20_13_GML.parquet](P04/P04-20_13_GML.parquet) | 2020 (令和2年) | GML 版 zip 内の GeoJSON | 25,424 | 1,657,806 |
| P29 学校 | [P29/P29-23_13_GML.parquet](P29/P29-23_13_GML.parquet) | 2023 (令和5年) | GML 版 zip 内の GeoJSON | 4,451 | 279,733 |
| A31a 洪水浸水想定区域 (東京都、洪水予報河川・水位周知河川) | [A31a/A31a-25_13_10_GEOJSON.parquet](A31a/A31a-25_13_10_GEOJSON.parquet) | 2025 (令和7年) | GeoJSON | 71,494 | 16,233,484 |
| A31a 洪水浸水想定区域 (東京都、その他の河川) | [A31a/A31a-25_13_20_GEOJSON.parquet](A31a/A31a-25_13_20_GEOJSON.parquet) | 2025 (令和7年) | GeoJSON | 224,984 | 29,150,519 |
| A31a 洪水浸水想定区域 (関東地方整備局、洪水予報河川・水位周知河川) の前半 | [A31a/A31a-25_83_10_GEOJSON-part0.parquet](A31a/A31a-25_83_10_GEOJSON-part0.parquet) | 2025 (令和7年) | GeoJSON | 2,300,062 | 316,730,523 |
| 同 後半 | [A31a/A31a-25_83_10_GEOJSON-part1.parquet](A31a/A31a-25_83_10_GEOJSON-part1.parquet) | 2025 (令和7年) | GeoJSON | 2,300,063 | 359,964,366 |
| mesh500r6 500m メッシュ別将来推計人口 (R6 国政局推計) | [mesh500r6/500m_mesh_2024_13_GEOJSON.parquet](mesh500r6/500m_mesh_2024_13_GEOJSON.parquet) | 2024 (令和6年) | GeoJSON | 5,447 | 7,286,936 |

## 元データ

取得日時はすべて 2026-09-28 (JST)。大きさはカタログの file_size と一致することを確かめた。

| ファイル | 元の zip | 取得日時 | zip の大きさ (bytes) | サーバーの Last-Modified |
|---|---|---|---|---|
| P04-20_13_GML | https://nlftp.mlit.go.jp/ksj/gml/data/P04/P04-20/P04-20_13_GML.zip | 2026-09-28T18:11:03+09:00 | 4,873,509 | 2021-06-04 |
| P29-23_13_GML | https://nlftp.mlit.go.jp/ksj/gml/data/P29/P29-23/P29-23_13_GML.zip | 2026-09-28T18:10:52+09:00 | 690,216 | 2024-06-14 |
| A31a-25_13_10_GEOJSON | https://nlftp.mlit.go.jp/ksj/gml/data/A31a/A31a-25/A31a-25_13_10_GEOJSON.zip | 2026-09-28T18:11:22+09:00 | 12,631,363 | 2026-05-07 |
| A31a-25_13_20_GEOJSON | https://nlftp.mlit.go.jp/ksj/gml/data/A31a/A31a-25/A31a-25_13_20_GEOJSON.zip | 2026-09-28T18:11:33+09:00 | 21,261,754 | 2026-05-07 |
| A31a-25_83_10_GEOJSON | https://nlftp.mlit.go.jp/ksj/gml/data/A31a/A31a-25/A31a-25_83_10_GEOJSON.zip | 2026-09-28T18:14:00+09:00 | 553,255,012 | 2026-05-07 |
| 500m_mesh_2024_13_GEOJSON | https://nlftp.mlit.go.jp/ksj/gml/data/m500r6/m500r6-24/500m_mesh_2024_13_GEOJSON.zip | 2026-09-28T18:11:10+09:00 | 8,588,212 | 2024-12-24 |

## ライセンス

カタログの license と terms_applied をそのまま写す。

| ファイル | license | terms_applied |
|---|---|---|
| P04-20_13_GML | CC-BY-4.0 | オープンデータ（CC_BY_4.0） |
| P29-23_13_GML | CC-BY-4.0 | 2023年度（令和5年度）、2021年度（令和3年度）：オープンデータ（CC_BY_4.0） |
| A31a-25_13_10_GEOJSON, A31a-25_13_20_GEOJSON, A31a-25_83_10_GEOJSON | CC-BY-4.0 | 2025年度、2024年度、2023年度、2022年度、2021年度（令和7年度、令和6年度、令和5年度、令和4年度、令和3年度）：オープンデータ（CC_BY_4.0） |
| 500m_mesh_2024_13_GEOJSON | CC-BY-4.0 | オープンデータ（CC_BY_4.0） |

## 座標系

すべて JGD2011 の経緯度 (EPSG:6668)。変換はしておらず、元の座標のまま。
GeoJSON 内の crs (urn:ogc:def:crs:EPSG::6668) と、同じ zip の .prj (GCS_JGD_2011) で確かめた。GeoParquet メタデータの crs にも JGD2011 の PROJJSON が入っている。
EPSG:6668 の軸順は緯度・経度だが、geometry の座標と bbox は x = 経度、y = 緯度で入っている (GeoParquet の慣例どおり)。

## 変換の内容

- DuckDB 1.5.5 (spatial 拡張の ST_Read、GDAL) で GeoJSON を読み、COPY で Parquet に書いた。
- P04 と P29 は「GML」版の zip しか無いが、中に GeoJSON (UTF-8) と Shapefile が同梱されている。文字コードの問題を避けるため GeoJSON を使った。行数は同梱の Shapefile と一致する。
- 属性の列はすべて残し、列名は元のまま (P04_001 など)。GDAL が足す OGC_FID は落とした。
- geometry 列 (GEOMETRY 型、WKB) と bbox 列 (struct: xmin, ymin, xmax, ymax、DOUBLE、Overture と同じ形) を足した。
- geometry の外接矩形の中心の Hilbert 曲線順 (ST_Hilbert、範囲はデータ全体の外接矩形) に並べた。行グループは 10,240 行 (DuckDB の単位に丸められる)、圧縮は zstd。GeoParquet 1.0.0 のメタデータ (geo) が付いている。
- A31a は 1 つの zip に河川ごと・種類ごとの GeoJSON が多数入っている。zip ごとに 1 つの Parquet にまとめ (列は名前で合わせた union)、どのファイルから来た行かを示す `source_file` 列 (元の GeoJSON のファイル名) を足した。ファイル名の `A31a-XX-` の XX が種類を表し、種類ごとに属性の列名が違う (該当しない列は NULL)。
  - 10: 計画規模 (A31a_101 から A31a_105)
  - 20: 想定最大規模 (A31a_201 から A31a_205)
  - 30: 浸水継続時間 (A31a_301 から A31a_305)
  - 41: 家屋倒壊等氾濫想定区域 (氾濫流) (A31a_401 から A31a_405)
  - 42: 家屋倒壊等氾濫想定区域 (河岸侵食) (A31a_401 から A31a_405。41 と同じ列名なので source_file で見分ける)
- A31a の東京都の範囲には、都の管理河川 (A31a-25_13_*) だけでなく、国の管理河川 (荒川、多摩川、利根川水系など) を収めた関東地方整備局のファイル (A31a-25_83_10) もかかるので、これも置いた。このファイルは関東地方整備局の管内全体 (東京都の外も含む) で、切り出しはしていない (範囲は経度 138.43 から 140.86 度、緯度 35.12 から 36.79 度)。台東区など東京都の東部の浸水想定は主にこのファイルにある。
- A31a-25_83_10 は 1 ファイルだと 677,613,537 バイトになる。前段の Cloudflare は 512MB を超えるファイルをキャッシュせず (cf-cache-status が MISS のまま)、Range 要求の最初の 1 回でファイル全体を送ろうとして、台東区付近の読み出しに 67〜97 秒かかった。そこで Hilbert 順のまま行の番号で半分に分けた (並べ直していないので、それぞれが空間的にまとまった範囲になる)。前半は経度 138.43〜140.04、緯度 35.12〜36.43、後半は経度 139.60〜140.86、緯度 35.48〜36.79。2 つを合わせると元の 4,600,125 行になる。分けたあとは、台東区付近 (後半の 1,948 行) を 0.5〜0.7 秒で読める (キャッシュに載る最初の 1 回だけ約 23 秒)。2 つを一緒に読むときは read_parquet(['...part0.parquet', '...part1.parquet']) のように並べる。
- 範囲: P04 と mesh500r6 には南鳥島 (東経 153.98 度) の行があり、経度の範囲は 153.98 度まで伸びる。

## 読み方の例

```sql
-- 台東区付近
select count(*) from read_parquet('https://z.yuiseki.net/static/ksj/P04/P04-20_13_GML.parquet')
where bbox.xmax >= 139.7622 and bbox.xmin <= 139.8098
  and bbox.ymax >= 35.6948 and bbox.ymin <= 35.7316;
```

## 置かなかったもの

- 選んだ最新年の Item はすべて redistribution = allowed だったので、最新年で公開を見送ったものは無い。
- 同じ年の別形式 (GML 版、Shapefile 版) は内容が同じなので置いていない。
- 参考: 古い年には再配布できないものがある。A31-12_13_GML (2012 年度、非商用) と P29-13_13 (2013 年度、非商用) は redistribution = not-allowed。最新年ではないので対象外で、置いていない。
