本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:行政区画の境界データを取得できる「geobounds」パッケージの紹介

「geobounds」パッケージは、世界各国の行政区画の境界線データを取得できるパッケージです。国名またはISO 3166-1 alpha-3の国コードを渡すと、国境から都道府県・州、市区町村といった各レベルの区域を、地図作成や空間解析にそのまま使える「sf」オブジェクトとして受け取れます。

データはgeoBoundariesプロジェクトからインターネット越しに取得するため、実行には接続環境が必要です。国ごとに配布元やライセンスが異なる境界データを、Rから同じ手順でそろえたい人に向いています。地図や空間解析の下準備を進めやすくなるのではないかと考えます。

パッケージバージョンは1.0.1。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("geobounds")

# パッケージの読み込み
library("geobounds")

# プロットと空間データの操作で使用
library("ggplot2")
library("sf")
Linking to GEOS 3.14.1, GDAL 3.12.1, PROJ 9.7.1; sf_use_s2() is TRUE
スポンサーリンク

コマンド例

詳細はコメント、パッケージのヘルプを確認してください。

「sf」オブジェクトは、地図上の点や線、面といった空間データを、通常のデータフレームと同じ感覚で扱うためのデータ構造です。geoboundsが返す境界データもこの形式で、1行が1つの区域、列にその名称やコードが入ります。

geoBoundariesは、世界各国の行政区画の境界データを配布しているプロジェクトです。ADM0が国全体、ADM1が都道府県や州にあたる第1レベル、ADM2がその下の市区町村にあたる第2レベルというように、数字が大きいほど細かい区分を指します。

取得したデータはキャッシュに保存され、次回以降は同じダウンロードを繰り返しません。保存先の指定や確認、削除を行うコマンドも用意されています。

行政区画レベルを指定した境界データの取得:gb_getコマンド

取得する行政区画レベルをadm_lvlで指定して、国全体から市区町村までの境界データを取り出す基本のコマンドです。ここでは日本の第1レベルにあたる都道府県の境界を取得します。

オプション意味初期値
country国名またはISO 3166-1 alpha-3の国コード。”all”で全ての国を対象にするなし
adm_lvl取得する行政区画レベル。”adm0″は国境、”adm1″は第1レベル、以降は”adm2″などと指定する。”all”で利用可能な全レベル“adm0”
simplifiedTRUEで精度は落ちるが描画の速い簡易版の境界を取得するFALSE
release_type取得するデータ系列。”gbOpen”、”gbHumanitarian”、”gbAuthoritative”のいずれかc(“gbOpen”, “gbHumanitarian”, “gbAuthoritative”)
quietTRUEで処理中のメッセージを表示しないTRUE
overwriteTRUEでソースのzipファイルを再ダウンロードするFALSE
cache_dirダウンロードしたファイルを保存するディレクトリのパス。NULLで既定のキャッシュ先を使うNULL
# 日本の第1レベル(都道府県)の境界を簡易版で取得
japan_adm1 <- gb_get("Japan", adm_lvl = "adm1", simplified = TRUE)

# 取得した区域の数を確認
nrow(japan_adm1)
[1] 47

# 区域名が入っている列の先頭を確認
head(japan_adm1$shapeName)
[1] "Osaka Prefecture" "Oita"             "Hyogo Prefecture" "Fukui Prefecture"
[5] "Shiga"            "Nara Prefecture"

# 47都道府県の境界をまとめて描画
ggplot(japan_adm1) +
  geom_sf(fill = "#E8F0E3", color = "grey40")

47都道府県の境界をまとめて描画

第2レベルの境界データの取得:gb_get_adm2コマンド

gb_get_adm0からgb_get_adm5までは、行政区画レベルを名前で固定した取得用のコマンドです。gb_get_adm2は第2レベル、日本では市区町村にあたる境界を取得します。取得後にsfパッケージのst_cropで京都府周辺の経緯度の範囲に切り出します。

オプション意味初期値
country国名またはISO 3166-1 alpha-3の国コード。”all”で全ての国を対象にするなし
simplifiedTRUEで精度は落ちるが描画の速い簡易版の境界を取得するFALSE
release_type取得するデータ系列。”gbOpen”、”gbHumanitarian”、”gbAuthoritative”のいずれかc(“gbOpen”, “gbHumanitarian”, “gbAuthoritative”)
quietTRUEで処理中のメッセージを表示しないTRUE
overwriteTRUEでソースのzipファイルを再ダウンロードするFALSE
cache_dirダウンロードしたファイルを保存するディレクトリのパス。NULLで既定のキャッシュ先を使うNULL
# 日本の第2レベル(市区町村)の境界を簡易版で取得
japan_adm2 <- gb_get_adm2("Japan", simplified = TRUE)

# 京都府周辺の経度・緯度の範囲でデータを切り出す
kyoto_area <- st_crop(
  japan_adm2,
  xmin = 134.8, xmax = 136.1,
  ymin = 34.7, ymax = 35.8
)
Warning message:
attribute variables are assumed to be spatially constant throughout all geometries

# 切り出した市区町村の境界を描画
ggplot(kyoto_area) +
  geom_sf(fill = "#F5E6C8", color = "grey50")

切り出した市区町村の境界を描画

世界規模の統合データからの境界データの取得:gb_get_worldコマンド

gb_get_worldは、各国の境界を1つにまとめたCGAZ(Comprehensive Global Administrative Zones)データセットから境界を取り出します。対象はadm0からadm2までで、国をまたいで縮尺のそろった境界がほしいときに使います。ここでは日本の第1レベルを取得し、gb_getの結果と区域数を見比べます。

オプション意味初期値
country国名またはISO 3166-1 alpha-3の国コード。”all”で全ての国を対象にする“all”
adm_lvl取得する行政区画レベル。”adm0″、”adm1″、”adm2″のいずれか“adm0”
quietTRUEで処理中のメッセージを表示しないTRUE
overwriteTRUEでソースのzipファイルを再ダウンロードするFALSE
cache_dirダウンロードしたファイルを保存するディレクトリのパス。NULLで既定のキャッシュ先を使うNULL
# CGAZデータセットから日本の第1レベル境界を取得
japan_world <- gb_get_world("Japan", adm_lvl = "adm1")

# gb_getで取得した区域数と見比べる
nrow(japan_world)
[1] 47

# CGAZ版の都道府県境界を描画
ggplot(japan_world) +
  geom_sf(fill = "#DCE7F0", color = "grey40")

CGAZ版の都道府県境界を描画

利用可能な境界データの一覧の取得:gb_get_metadataコマンド

ダウンロードの前に、対象の国でどのレベルの境界が用意されているか、出典やライセンスは何かを調べるコマンドです。境界データそのものではなく、説明用の表を返します。

オプション意味初期値
country国名またはISO 3166-1 alpha-3の国コード。”all”で全ての国を対象にする“all”
adm_lvl対象とする行政区画レベル。”all”で全レベル“all”
release_type対象とするデータ系列。”gbOpen”、”gbHumanitarian”、”gbAuthoritative”のいずれかc(“gbOpen”, “gbHumanitarian”, “gbAuthoritative”)
# 日本について利用可能な境界データの一覧を取得
japan_meta <- gb_get_metadata("Japan")

# 何レベル分のデータがあるかを確認
nrow(japan_meta)
[1] 3

# 一覧に含まれる項目名を確認
names(japan_meta)
 [1] "boundaryID"                "boundaryName"
 [3] "boundaryISO"               "boundaryYearRepresented"
 [5] "boundaryType"              "boundaryCanonical"
 [7] "boundarySource"            "boundaryLicense"
 [9] "licenseDetail"             "licenseSource"
[11] "boundarySourceURL"         "sourceDataUpdateDate"
[13] "buildDate"                 "Continent"
[15] "UNSDG-region"              "UNSDG-subregion"
[17] "worldBankIncomeGroup"      "admUnitCount"
[19] "meanVertices"              "minVertices"
[21] "maxVertices"               "meanPerimeterLengthKM"
[23] "minPerimeterLengthKM"      "maxPerimeterLengthKM"
[25] "meanAreaSqKM"              "minAreaSqKM"
[27] "maxAreaSqKM"               "staticDownloadLink"
[29] "gjDownloadURL"             "tjDownloadURL"
[31] "imagePreview"              "simplifiedGeometryGeoJSON"

取得できる最大の行政区画レベルの確認:gb_get_max_adm_lvlコマンド

国ごとに、どこまで細かい行政区画レベルの境界が提供されているかは異なります。このコマンドは、指定した国で取得できる最も深いレベルを返します。

オプション意味初期値
country国名またはISO 3166-1 alpha-3の国コード。”all”で全ての国を対象にする“all”
release_type対象とするデータ系列。”gbOpen”、”gbHumanitarian”、”gbAuthoritative”のいずれかc(“gbOpen”, “gbHumanitarian”, “gbAuthoritative”)
# 日本で取得できる最も細かい行政区画レベルを確認
gb_get_max_adm_lvl("Japan")
# A tibble: 1 × 2
  boundaryISO maxBoundaryType
  <chr>                 <int>
1 JPN                       2

ダウンロード先の指定:gb_set_cache_dirコマンド

取得した境界データの保存先を指定します。作業フォルダの中に置いておくと、同じ解析を再開したときに再ダウンロードを避けられます。installにTRUEを渡すと、次回以降のセッションでも同じ保存先を使います。

オプション意味初期値
cache_dirキャッシュ先のディレクトリのパス。NULLで一時ディレクトリを使うNULL
overwriteTRUEで設定ファイルに保存済みのキャッシュ先を置き換えるFALSE
installTRUEでキャッシュ先を次回以降のセッションでも使えるよう保存するFALSE
quietTRUEで処理中のメッセージを表示しないFALSE
# ダウンロードしたファイルの保存先を作業フォルダ内に指定
gb_set_cache_dir("kyoto_boundaries", install = FALSE)
✔ geobounds cache directory is 'kyoto_boundaries'.
ℹ To use this cache directory in future sessions, call `gb_set_cache_dir()` with `install = TRUE`.

現在のダウンロード先の確認:gb_detect_cache_dirコマンド

いま境界データがどこに保存されるかを返します。gb_set_cache_dirで保存先を指定していなければ、一時ディレクトリのパスが返ります。

オプション意味初期値
x指定しても無視されるNULL
# 現在のダウンロード先を確認
gb_detect_cache_dir()
ℹ 'kyoto_boundaries'
[1] "kyoto_boundaries"

ダウンロード済みデータの削除:gb_clear_cacheコマンド

キャッシュに保存された境界データを削除します。configにTRUEを渡すと、保存先の設定そのものも消します。作業が終わって容量を空けたいときに使います。

オプション意味初期値
configTRUEでgeoboundsの設定ディレクトリを削除するFALSE
cached_dataTRUEで現在のキャッシュディレクトリとその内容を全て削除するTRUE
quietTRUEで処理中のメッセージを表示しないTRUE
# キャッシュに保存された境界データを削除
gb_clear_cache(cached_data = TRUE)


この記事が誰かの役に立ちますように。

スポンサーリンク
価格および配送状況は変更される場合があります。購入時は商品ページをご確認ください。
当サイトに表示されている商品情報はAmazonから提供されたものであり、更新または削除される場合があります。
karada-goodはAmazonアソシエイトとして、適格販売により収入を得ています。