library(tidyverse)
library(sf)
library(tmap)
library(tmaptools)国土数値情報 土地利用細分メッシュデータとRを活用した都市開発の変遷把握
本ドキュメントは、クリエイティブ・コモンズ・ライセンス表示4.0国際ライセンスのもとで提供されています。
本ドキュメントは下記の著作物をもとに改変して作成しています: 国土交通省 政策統括官付 地理空間情報課「国土数値情報 土地利用細分メッシュデータとQGISを活用した都市開発の変遷把握」(2026年3月、CC BY 4.0)
はじめに
この記事では、国土数値情報で公開されている土地利用細分メッシュデータを対象に、Rを用いた活用方法を解説します。 主に自治体職員や都市計画コンサルタントに加え、防災・環境分野の実務者、インフラ・不動産関連業務に携わる方、研究・教育分野の利用者を想定し、以下の解析方法を紹介します。
- 土地利用変遷を地図上で可視化
- 複数年度の土地利用区分を地図上で可視化します。
- 新旧の土地利用区分データを地図で見比べることで、土地利用の変遷を把握できるようにします。
- 土地利用変遷の解析(クロス集計)
- Rの統計分析機能を活用し、土地利用の変遷についてクロス集計を実施します。
- クロス集計したデータを加工し、年度間で遷移した土地利用の特徴を把握できるようにします。
これらの手法により、土地利用の変化や転用傾向を視覚的・定量的に把握し、都市構造の分析や防災・環境施策、土地利用計画の検討などに活用できます。
- この記事は、R 4.6.0で執筆しています。
- この記事は、Rの基本操作ができることを前提として書かれています。
流山市の近年の人口増加について
千葉県流山市は、住宅情報サイトが毎年公表する「住みたい街ランキング」で上位に名を連ね、全国トップクラスの人口増加率2016~2021年に全国の市で人口増加率1位)を誇る市です。
2015年から2025年の間で人口は約4万人増えており、35~39歳代の人口のボリュームが最も多く増えています。

この人口増加の背景には、2005年のつくばエクスプレスの開通が影響しています。
つくばエクスプレス開通後、市内の流山おおたかの森駅周辺では、大型商業施設やタワーマンション群が建設され、駅から少し離れたエリアでは区画整理された戸建て住宅の開発が進みました。 また、人口増加に伴い、公園や学校などの公共インフラの整備も進められています。 このことから、流山市では広域にわたる土地利用の変化が2005年以降にあったと推測できます。
この記事では、この人口増加がめざましい流山市の近年の土地利用状況の変化について、国土数値情報 土地利用細分メッシュデータを使用して把握を行います。
土地利用細分メッシュデータとは
土地利用細分メッシュデータとは、国土数値情報において整備・公開されている土地利用に関する判読データで、全国を一定のメッシュ( 3次メッシュ1/10細分区画(100mメッシュ))に区切り、それぞれの区画ごとに土地利用区分を付与したものです。 土地利用区分には、建物用地、道路、森林、ゴルフ場などが含まれており、地域の土地利用の実態を面的に把握することができます。

この土地利用細分メッシュデータを、GISソフトを用いて地図上に可視化したり、他の統計データや災害リスク情報などと組み合わせて分析したりすることで、都市計画や国土利用計画の検討をはじめ、土地利用の変化分析、防災・環境分野での基礎資料など、さまざまな分野で活用がされています。 また、土地利用細分メッシュデータは、1976年度版の公開から現在に至るまで、定期的にデータが整備・公開されているため、長期的な土地利用の変化や転用傾向の分析に用いることができます。

土地利用細分メッシュデータのダウンロードと追加
それでは、国土数値情報から土地利用細分メッシュデータをダウンロードし、Rで読み込みましょう。
データのダウンロードと読み込み
国土数値情報の土地利用細分メッシュデータのダウンロードページにアクセスします。 次に、ページの下部へスクロールをすると、ダウンロード対象の地域を選択できる画面が表示されるので、目的のエリアのメッシュをクリックします。

さらにページの下部へスクロールをし、任意年度の行の一番右にある[一括DL]のチェックボタンをクリックします。 そして、最後に[一括ダウンロード]ボタンをクリックしましょう。
本記事では、千葉県流山市が含まれるメッシュデータをダウンロードして以降の説明を行います。使用するデータの年度は2006年と2014年、2021年の世界測地系のデータです。

画面上に、「国土数値情報ダウンロードサイト ユーザーアンケート」が表示されるので、必要に応じて回答を行いましょう。 回答を完了するか[スキップする]をクリックすることで、データのダウンロードが開始されます。

データのダウンロードが完了したら、ZIPファイルを解凍して、ファイルをデータフォルダに追加しましょう。
以降では、ワーキングディレクトリにdataという名前のデータフォルダがあり、使用するファイルはすべてdataフォルダに入っているものとします。
mesh2006 <-
read_sf("data/L03-b-06_5339-jgd_GML/L03-b-06_5339-jgd_LandUseSubdivisionMesh.shp") |>
st_set_crs(4612) |> st_transform(6668)
mesh2014 <-
read_sf("data/L03-b-14_5339-jgd_GML/L03-b-14_5339.shp", options = "ENCODING=CP932") |>
st_transform(6668)
mesh2021 <-
read_sf("data/L03-b-21_5339-jgd2011_GML/L03-b-21_5339.shp")2006(平成18年版)のデータには座標系が設定されていないため、JGD2000(EPSG:4612)[^td]を 設定した上で、JGD2011(EPSG:6668)に変換しています。 また、2014(平成26年版)のデータの座標系はJGD2000なので、JDG2011(EPSG:6668)に変換しています。
2014(平成26年版)のデータのみデータ列名が日本語(SJIS)になっているので、option引数でファイルエンコーディングを指定しています。
属性テーブルの確認
続いて、土地利用細分メッシュデータの属性テーブルを確認します。
glimpse(mesh2006)Rows: 630,000
Columns: 3
$ L03b_001 <chr> "5339000000", "5339000001", "5339000002", "5339000003", "5339…
$ L03b_002 <chr> "6", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "…
$ geometry <POLYGON [°]> POLYGON ((139 35.33333, 139..., POLYGON ((139.0012 35…
属性テーブルを確認すると、いくつかの列が存在していることがわかります。 また、それぞれの属性名が「L03b_001」のような形式で記載されていることもわかります。
それぞれの属性が何を示しているか確認したい場合は、土地利用細分メッシュデータのダウンロードページにある「属性情報」の欄を参照してください。
土地利用細分メッシュデータは、整備年度によって属性の内容が異なるので注意する必要があります。

なお、この記事で主に使用する属性の説明については以下に示します。
年度によって、属性の数や名前に違いがある点に注意してください。
| 属性名 | 説明 |
|---|---|
| L03b_001:メッシュコード | 3次メッシュコード 8桁×100+左下を00とし附番したコード(3次メッシュ1/10細分メッシュコード) |
| L03b_002:土地利用種別 | 当該メッシュにおける土地利用種別 1:田、2:その他の農用地、5:森林、6:荒地、7:建物用地、9:幹線交通用地、A:その他の用地、B:河川地及び湖沼、E:海浜、F:海水域、G:ゴルフ場 |
| 属性名 | 説明 |
|---|---|
| メッシュ:メッシュコード | 3次メッシュコード 8桁×100+左下を00とし附番したコード(3次メッシュ1/10細分メッシュコード) |
| 土地利用種:土地利用種別 | 当該メッシュにおける土地利用種別 0100:田、0200:その他の農用地、0500:森林、0600:荒地、0700:建物用地、0901:道路、0902:鉄道、1000:その他の用地、1100:河川地及び湖沼、1400:海浜、1500:海水域、1600:ゴルフ場 |
| 属性名 | 説明 |
|---|---|
| L03b_001:メッシュコード | 3次メッシュコード 8桁×100+左下を00とし附番したコード(3次メッシュ1/10細分メッシュコード) |
| L03b_002:土地利用種別 | 当該メッシュにおける土地利用種別 0100:田、0200:その他の農用地、0500:森林、0600:荒地、0700:建物用地、0901:道路、0902:鉄道、1000:その他の用地、1100:河川地及び湖沼、1400:海浜、1500:海水域、1600:ゴルフ場 |
| L03b_003:衛星写真撮影年月日 | 当該メッシュ土地利用種別を判読した衛星写真の撮影年月日 |
上述した2006〜2021年度版の土地利用細分メッシュデータの属性情報について、重要な注意点があります。 各メッシュの土地利用種別について、2014年度版と2021年度版は同じコードリストに則っていますが、2006年度版は別のコードリストで値が格納されています。

これは、19912006年度版のデータと、20092021年度版のデータで、どちらも基本的に土地利用種別の分類自体は同一(※幹線交通用地は2009~2021年度版のデータの方が区分は細かい)である一方で、各土地利用種別に対応しているコード番号が異なるためです。 コードの対応表を用意しておくことで、土地利用の変遷をわかりやすくすることができます。
| 種別 | 土地利用種別(2006年度、1997年度、1991年度) | 土地利用種別(2021年度、2016年度、2014年度、2009年度) |
|---|---|---|
| 田 | 1 | 0100 |
| その他の農用地 | 2 | 0200 |
| 森林 | 5 | 0500 |
| 荒地 | 6 | 0600 |
| 建物用地 | 7 | 0700 |
| 幹線交通用地(道路) | 9 | 0901 |
| 幹線交通用地(鉄道) | 9 | 0902 |
| その他の用地 | A | 1000 |
| 河川地及び湖 | B | 1100 |
| 海浜 | E | 1400 |
| 海水域 | F | 1500 |
| ゴルフ場 | G | 1600 |
対応表の作成
後述する作業で土地利用の確認がしやすくなるように、コード番号と土地利用種別の対応表を作成しておきます。 2006年度のデータの対応表と、2014年度と2021年度のデータの対応表のそれぞれをRで作成します。
ここでは、土地利用種別(平成3年度、9年度、18年度)と、土地利用種別(平成21年度、26年度、28年度)のHTMLテーブルを読み込むことで、対応表を作成します。
HTMLのテーブルを読むには、rvestパッケージのread_html関数とhtml_table関数を使うのが便利です。
library(rvest)
code2006 <-
read_html("https://nlftp.mlit.go.jp/ksj/gml/codelist/LandUseCd-YY.html") |>
html_table(header = TRUE) |> pluck(1) |>
select(`対応する内容`, `コード`) |> deframe()
glimpse(code2006) Named chr [1:16] "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" ...
- attr(*, "names")= chr [1:16] "田" "その他の農用地" "-" "-" ...
code2014 <-
read_html("https://nlftp.mlit.go.jp/ksj/gml/codelist/LandUseCd-09.html") |>
html_table(header = TRUE, convert = FALSE) |> pluck(1) |>
select(`種別`, `コード`) |> deframe()
glimpse(code2014) Named chr [1:17] "0100" "0200" "0300" "0400" "0500" "0600" "0700" "0800" ...
- attr(*, "names")= chr [1:17] "田" "その他の農用地" "-" "-" ...
html_tableは、HTMLに含まれるテーブルをtibbleに変換してそのリストを返しますので、purrr::pluck関数を使って、リストの最初の要素を取り出しています(HTMLにテーブルが1つしかない場合も長さ1のリストを返しますので、plucnが必要です)。
purrr::deframe関数は、2列のデータフレームを名前付きベクトル(Named Vector)に変換します。 第1列が名前、第2列が値になりますので、ここでは土地利用区分名が名前、コードが値の対応表が作られます。
行政区域データによる対象地域データの抽出
千葉県流山市を対象に土地利用の変遷を確認していくことを容易にするため、流山市の行政区域データをQGISに追加します。
データのダウンロード
土地利用細分メッシュデータの時と同様に行います。
国土数値情報の行政区域データのダウンロードページにアクセスします。 ページの下部へスクロールし、令和7年の千葉県のデータをダウンロードします。
データのダウンロードが完了したら、ZIPファイルを解凍して、「.geojson」ファイルをデータフォルダに移動しましょう。 移動したら、Rに読み込みます。
nagareyama <-
read_sf("data/N03-20250101_12.geojson") |>
filter(N03_004 == "流山市")filter関数を使って、N03_004(市区町村名)が「流山市」であるデータ行だけを抜き出しています。
gsi_tile <- "https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png"
credit <- "国土数値情報および地理院タイル(淡色地図)を加工して作成"
tm_shape(nagareyama) + tm_polygons() +
tm_layout(text.fontfamily = "BIZ UDPGothic") +
tm_credits(credit) +
tm_basemap(gsi_tile)
対象地域データの抽出
今回利用する土地利用細分メッシュデータは地物数が63万件と非常に多いため、地図の描画や属性情報の確認をスムーズに行うことができません。
そこで、追加した流山市の行政区域データを活用します。 各年度の土地利用細分メッシュデータを流山市の行政区域データと交差する範囲で抽出します。
sfパッケージのst_filter関数を利用します。
mesh2006 <- mesh2006 |> st_filter(nagareyama)
mesh2014 <- mesh2014 |> st_filter(nagareyama)
mesh2021 <- mesh2021 |> st_filter(nagareyama)tm_shape(mesh2006) + tm_polygons() +
tm_layout(text.fontfamily = "BIZ UDPGothic") +
tm_credits(credit) +
tm_basemap(gsi_tile)
年度ごとの土地利用の可視化
流山市の土地変遷の把握に必要なデータが揃ったので、土地利用種別ごとに色分けして可視化してみましょう。
その前に、今のままでは土地利用種別がコード番号になっているので、わかりやすいように一手間加えます。
「土地利用種別」列(因子型)の作成
メッシュデータに「土地利用種別」列を追加します。 先ほど作った、土地利用区分名とコードの対応表を使います。
forcatsパッケージを使って、元々のコード(文字列型)データから、「土地利用種別」という因子型のデータを作ります。 forcats::fct関数でコードをレベルとする因子型に変換します。 forcats::fct_recode関数は因子型のラベルを変更する関数で、ここでは対応表をもとにコードを土地利用区分名に置き換えます。 forcats::fct_drop関数は、データに実際には含まれない未使用のレベルを除去します。 なお、2021年データは2014年と同じコード体系を使っています。
mesh2006 <- mesh2006 |>
mutate(土地利用種別 = L03b_002 |> fct(levels = code2006) |> fct_recode(!!!code2006) |> fct_drop())
mesh2014 <- mesh2014 |>
mutate(土地利用種別 = 土地利用種 |> fct(levels = code2014) |> fct_recode(!!!code2014) |> fct_drop())
mesh2021 <- mesh2021 |>
mutate(土地利用種別 = L03b_002 |> fct(levels = code2014) |> fct_recode(!!!code2014) |> fct_drop())「土地利用種別」カラーパレットの作成
土地利用種別による塗り分け地図を描画するために、カラーパレットを作成しておきます。 土地利用細分メッシュ(ラスタ版)データのカラーパレットを参考にします。

2006年度の「幹線交通用地」は、2014年度と2021年度では「道路」と「鉄道」に区分されます。 ここでは、「幹線交通用地」の色は、「道路」と「鉄道」の色の中間の色に設定することにします。
pal <- c(
"田" = rgb(255, 255, 0, maxColorValue = 255),
"その他の農用地" = rgb(255, 204, 153, maxColorValue = 255),
"森林" = rgb( 0, 170, 0, maxColorValue = 255),
"荒地" = rgb(255, 153, 0, maxColorValue = 255),
"建物用地" = rgb(255, 0, 0, maxColorValue = 255),
"幹線交通用地" = rgb(160, 160, 160, maxColorValue = 255), # 道路・鉄道の中間
"道路" = rgb(140, 140, 140, maxColorValue = 255),
"鉄道" = rgb(180, 180, 180, maxColorValue = 255),
"その他の用地" = rgb(200, 70, 15, maxColorValue = 255),
"河川地及び湖沼" = rgb( 0, 0, 255, maxColorValue = 255),
"海浜" = rgb(255, 255, 153, maxColorValue = 255),
"海水域" = rgb( 0, 204, 255, maxColorValue = 255),
"ゴルフ場" = rgb( 0, 255, 0, maxColorValue = 255)
)土地利用変遷の視覚的確認
各年度間で流山市の土地利用にどのような変化があったか確認・分析してみましょう。
それではまず、「2006年度→2014年度」の変化を見ていきます。
tm_shape(mesh2006) +
tm_polygons(
fill = "土地利用種別",
fill.scale = tm_scale_categorical(values = pal)
) +
tm_layout(text.fontfamily = "BIZ UDPGothic") +
tm_credits(credit) +
tm_basemap(gsi_tile)
tm_shape(mesh2014) +
tm_polygons(
fill = "土地利用種別",
fill.scale = tm_scale_categorical(values = pal)
) +
tm_layout(text.fontfamily = "BIZ UDPGothic") +
tm_credits(credit) +
tm_basemap(gsi_tile)
土地利用の変遷を確認してみましょう。 2014年度は2006年度に比べて、以下の土地変遷があったことが確認できます。
- 森林およびその他の農用地が減少し、建物用地へと変化している。
次に、「2014年度→2021年度」の変化を見ていきます。
tm_shape(mesh2021) +
tm_polygons(
fill = "土地利用種別",
fill.scale = tm_scale_categorical(values = pal)
) +
tm_layout(text.fontfamily = "BIZ UDPGothic") +
tm_credits(credit) +
tm_basemap(gsi_tile)
土地利用の変遷を確認してみましょう。 2021年度は2014年度に比べて、以下の土地変遷があったことが確認できます。
- 田が減少し、建物用地やその他の用地に変化している。
- その他の用地1から建物用地に変化している。
総括すると、森林や農用地が開発されて、その他の用地になった後、建物用地へ変遷していく様子が確認できました。
土地利用変遷の解析(クロス集計)
ここからは土地利用の変遷を定量的に解析してみます。
まず、2014年度と2021年度のデータについて、土地利用種別をクロス集計していきます。 クロス集計とは、収集したデータの中から2つ以上の項目(属性)を掛け合わせて集計し、その相互関係や傾向を明らかにする統計手法です。 土地利用の地図上における分布状況を「客観的な数値」に変換し、分析していきます。
テーブル結合
クロス集計を行うことを目的に1レイヤに各年度の土地利用種別の値を集約させます。 土地利用細分メッシュデータのメッシュコードをキーにテーブル結合していきます。 Rでは、left_join関数を使うことでの結合することができます。
dat2021 <- mesh2021 |> st_drop_geometry() |>
select(meshcode = L03b_001, 土地利用2021 = 土地利用種別)
dat2014 <- mesh2014 |> st_drop_geometry() |>
select(meshcode = メッシュ, 土地利用2014 = 土地利用種別)
dat2006 <- mesh2006 |> st_drop_geometry() |>
select(meshcode = L03b_001, 土地利用2006 = 土地利用種別)
dat <- dat2021 |>
left_join(dat2014, by = join_by(meshcode)) |>
left_join(dat2006, by = join_by(meshcode))
glimpse(dat)Rows: 3,718
Columns: 4
$ meshcode <chr> "5339669959", "5339579135", "5339579136", "5339579137", "…
$ 土地利用2021 <fct> 河川地及び湖沼, その他の農用地, 建物用地, 建物用地, 建物用地, 田, 建物用地, 建物用地, 河川地及び湖…
$ 土地利用2014 <fct> 河川地及び湖沼, その他の農用地, その他の農用地, その他の農用地, 建物用地, 田, 建物用地, 建物用地, …
$ 土地利用2006 <fct> 河川地及び湖沼, その他の農用地, 建物用地, 田, 田, 田, その他の農用地, 建物用地, 田, 田, 建物用…
クロス集計
Rでのクロス集計はとても簡単です。 例えば、xtabs関数を使って、さきほど結合したデータで、2014年度と2021年度の土地利用種別をクロス集計しすることができます。
xtabs(~ 土地利用2014 + 土地利用2021, data = dat) 土地利用2021
土地利用2014 田 その他の農用地 森林 荒地 建物用地 道路 鉄道 その他の用地
田 205 0 0 0 24 3 0 70
その他の農用地 2 227 6 0 117 2 1 8
森林 1 19 190 0 56 2 0 14
荒地 8 3 8 33 34 0 0 13
建物用地 0 12 7 0 2022 4 4 42
道路 0 0 0 0 0 33 0 0
鉄道 0 0 0 0 12 0 41 0
その他の用地 3 1 1 0 85 7 1 127
河川地及び湖沼 0 2 1 0 3 0 0 3
土地利用2021
土地利用2014 河川地及び湖沼
田 6
その他の農用地 0
森林 2
荒地 0
建物用地 3
道路 0
鉄道 1
その他の用地 3
河川地及び湖沼 246
クロス集計の結果をヒートマップにしてみます(ここではクロス集計にdplyr::count関数を使っています。)。
dat |>
count(土地利用2014, 土地利用2021) |>
filter(土地利用2014 != 土地利用2021) |>
ggplot(aes(x = 土地利用2021, y = fct_rev(土地利用2014), fill = n)) +
geom_tile() +
geom_text(aes(label = n)) +
scale_fill_distiller(palette = "Reds", direction = 1, guide = NULL) +
scale_x_discrete(position = "top") +
scale_y_discrete(name = "土地利用2014") +
theme_bw() +
theme(
axis.title = element_text(family = "BIZ UDPGothic"),
axis.text = element_text(family = "BIZ UDPGothic"),
axis.text.x = element_text(angle = 90, hjust = 0)
)
クロス集計表を分析すると2014年度から2021年度の間で、以下の変化を 定量的に把握することができました。
- 「その他の農用地」および「その他の用地」から「建物用地」に変化した地区が非常に多い
- それ以外の土地種別でも「建物用地」に多く変化している
- 「田」や「森林」、「荒地」などが「その他の用地」に変化していることも目立つ。今後、建物用地への転用されることなどが推測できる。
- 「建物用地」から「その他の用地」への変化しているセルも多くある。
「年度ごとの土地利用の可視化」と同様のことが確認でき、定量的に結果を再確認することができました。
次に、同様の手順で、2006年度と2014年度のデータについて、土地利用種別のクロス集計を行った結果を示します。

クロス集計の結果を比較すると、2014年度から2021度年における土地利用の変化よりも、2006年度から2014年度における土地利用の変化の方が、建物用地やその他用地へ転用されたメッシュ数が全体的に多いことが分かります。 このことから、2014年度から2021度年の間よりも、2006年度から2014年度の間で、より開発が進行していたことがうかがえます。
おわりに
本記事では、Rを使用した土地利用細分メッシュの分析手法を紹介しました。 土地利用変遷状況の可視化や、定量的に分析できるクロス集計の方法など、実務に即した分析方法としてご活用いただければと思います。 また、これらの手法は、土地利用データ以外の地理空間情報データにも応用できるため、様々な空間分析のヒントとしてご活用ください。
この記事の執筆に使用したパッケージとそのバージョンは以下の通りです。
| package | loadedversion | source |
|---|---|---|
| rvest | 1.0.5 | CRAN (R 4.6.0) |
| sf | 1.1-1 | CRAN (R 4.6.0) |
| tidyverse | 2.0.0 | CRAN (R 4.6.0) |
| tmap | 4.3 | CRAN (R 4.6.0) |
| tmaptools | 3.3 | CRAN (R 4.6.0) |
| units | 1.0-1 | CRAN (R 4.6.0) |
「その他の用地」とは、運動競技場、空港、競馬場・野球場・学校・港湾地区・人工造成地の空地などの土地利用が該当する種別です。↩︎