地域コードで塗る地図を HTML で作る
Queria が配っている都道府県・市区町村・町丁目の境界を使い、地域コードごとの値で色を塗った地図を 1 枚の HTML で作る
Queria は、都道府県・市区町村・町丁目の境界を地図のタイル(PMTiles 形式)にして配っています。タイルの各区画は地域コードを持っているので、地域コードと値の組を用意すれば、その値で色を塗った地図を作れます。境界のファイルをダウンロードして変換する必要はありません。
このページの HTML は、AI に地図のアプリを作ってもらうときの見本にも使えます。AI にこのページの URL を渡してください。
タイルの場所
https://assets.queria.io/boundaries/boundaries-20261027.pmtiles
ファイル名の日付は、タイルを作った日です。境界が更新されると、新しい日付の名前で別のファイルを置きます。置いたファイルの中身は書き換えません。今使えるファイルの名前は、このページに書いています。
レイヤーと地域コード
1 つのファイルに 3 つのレイヤーが入っています。各区画は code という属性を 1 つだけ持ちます。
| レイヤー | 区画 | code の形 |
表示できるズーム |
|---|---|---|---|
prefecture |
都道府県 | 2 桁(東京都は 13) |
0〜10 |
city |
市区町村 | 5 桁(新宿区は 13104) |
4〜12 |
small_area |
町丁目 | 9 桁または 11 桁(国勢調査の小地域コード) | 10〜13 |
表示できるズームより寄った地図では、MapLibre がいちばん細かいタイルを拡大して描きます。表示できるズームより引いた地図には、そのレイヤーの区画は出ません。
code は文字列です。数字の列から作った値は、先頭の 0 が落ちていないか確かめてください(北海道は 1 ではなく 01)。6 桁の全国地方公共団体コード(新宿区は 131041)を使うときは、先頭の 5 桁にします。
政令指定都市は、区ごとの区画だけがあり、市全体の区画はありません(横浜市の 14100 は無く、鶴見区の 14101 などがあります)。市の値で塗るときは、各区に同じ値を入れてください。
都道府県を塗る HTML
次の HTML をファイルに保存して、ブラウザで開くと地図が表示されます。values に地域コードと値の組を入れると、値が大きい区画ほど濃い色で塗られます。values に無い区画は灰色になります。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>都道府県の人口</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/maplibre-gl@6.14.0/dist/maplibre-gl.css">
<script src="https://cdn.jsdelivr.net/npm/pmtiles@4.5.0/dist/pmtiles.js"></script>
<style>html, body, #map { height: 100%; margin: 0; }</style>
</head>
<body>
<div id="map"></div>
<script type="module">
import * as maplibregl from "https://cdn.jsdelivr.net/npm/maplibre-gl@6.14.0/dist/maplibre-gl.mjs";
// 地域コードと値。Queria で SQL を流した結果をここに入れる
const values = { "13": 14047594, "14": 9237337, "27": 8837685 };
const max = Math.max(...Object.values(values));
const color = (v) => `rgba(37, 99, 235, ${(0.15 + 0.85 * v / max).toFixed(2)})`;
const fill = ["match", ["get", "code"],
...Object.entries(values).flatMap(([code, v]) => [code, color(v)]),
"#e5e7eb"];
const protocol = new pmtiles.Protocol();
maplibregl.addProtocol("pmtiles", protocol.tile);
new maplibregl.Map({
container: "map",
center: [137, 37],
zoom: 4,
style: {
version: 8,
sources: {
boundaries: {
type: "vector",
url: "pmtiles://https://assets.queria.io/boundaries/boundaries-20261027.pmtiles",
maxzoom: 10,
attribution: "「国土数値情報(行政区域データ)」(国土交通省)を Queria が加工して作成",
},
},
layers: [
{ id: "background", type: "background", paint: { "background-color": "#ffffff" } },
{
id: "prefecture",
type: "fill",
source: "boundaries",
"source-layer": "prefecture",
paint: { "fill-color": fill, "fill-outline-color": "#ffffff" },
},
],
},
});
</script>
</body>
</html>
市区町村や町丁目を塗るとき
HTML の 3 か所を変えます。
"source-layer"をcityまたはsmall_areaにするsources.boundariesのmaxzoomを、上の表の「表示できるズーム」の上限(市区町村は 12、町丁目は 13)にする- 町丁目はズーム 10 より引くと表示されないので、
centerとzoomを塗りたい地域に合わせる(例: 新宿区ならcenter: [139.70, 35.69]、zoom: 12)
地図を地域に寄せる範囲は、タイルと同じ場所にある boundaries-20261027.bbox.json で引けます。都道府県(2 桁)と市区町村(5 桁)のコードごとに [西, 南, 東, 北] の経緯度が入っています。map.fitBounds() に渡すと、その範囲が画面に収まります。
値を用意する
values には、Queria で SQL を流した結果を { 地域コード: 値 } の形で入れます。SQL は Queria CLI や AI チャット から流せます。地域コードの列がどの形か(2 桁・5 桁・6 桁など)は、テーブル詳細ページの列の説明で確かめてください。
出典の表記
地図には出典を表示してください。HTML の attribution に入れた文字は、地図の右下に表示されます。
- 都道府県・市区町村: 「国土数値情報(行政区域データ)」(国土交通省)を Queria が加工して作成
- 町丁目: 「令和2年国勢調査 境界データ」(総務省統計局、政府統計の総合窓口 e-Stat)を Queria が加工して作成
塗った値の出典も、あわせて表示してください。書き方は出典・ライセンス表記を参照してください。
