jpmeshパッケージは、日本国内で利用される「地域メッシュ(メッシュコード)」をRから容易に利用可能にするパッケージです。地域メッシュとは、日本国土を緯度・経度により方形の小地域区画に細分することで、同一の基準による統計調査などの結果を得ることが可能となります。80kmから125mまでのメッシュコードに対応し、メッシュコードと緯度経度座標との相互変換を行います。
jpmeshの主な機能として、「緯度経度からの地域メッシュへの変換」、「地域メッシュからの緯度経度の取得」、「都道府県単位やleaflet上へのマッピング」があります。なお地域メッシュと緯度経度の変換の基礎は竹中明夫さんのRコードが基礎となっています。ここではその使い方を紹介します。
パッケージをインストールしたら環境内で利用可能にするため、読み込みを行いましょう。また、このサンプルページで用いるパッケージも同時に読み込むようにしておきます。
library(jpmesh)
library(sf)
library(dplyr)
library(purrr)
mesh_to_coords()
関数を利用し、緯度経度から地域メッシュを得ることができます。この関数では11桁までの細分地域メッシュに対応し、メッシュの中心座標とメッシュの範囲を示す値を返します。
mesh_to_coords(5133)
## # A tibble: 1 x 4
## lng_center lat_center lng_error lat_error
## <dbl> <dbl> <dbl> <dbl>
## 1 134 34.3 0.500 0.333
mesh_to_coords(513377)
## # A tibble: 1 x 4
## lng_center lat_center lng_error lat_error
## <dbl> <dbl> <dbl> <dbl>
## 1 134 34.6 0.0625 0.0417
mesh_to_coords(51337783)
## # A tibble: 1 x 4
## lng_center lat_center lng_error lat_error
## <dbl> <dbl> <dbl> <dbl>
## 1 134 34.7 0.00625 0.00417
得られるメッシュの領域データを使ってメッシュのポリゴンを作成する例です。
export_mesh(5133778311)
## Geometry set for 1 feature
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: 133.9125 ymin: 34.65 xmax: 133.9156 ymax: 34.65208
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## POLYGON ((133.9125 34.65, 133.9156 34.65, 133.9...
mesh_to_coords(5133778311) %>%
dplyr::mutate(geometry = purrr::pmap_chr(., ~ jpmesh:::mesh_to_poly(...))) %>%
dplyr::select(geometry)
## # A tibble: 1 x 1
## geometry
## <chr>
## 1 POLYGON ((133.9125 34.65, 133.9156 34.65, 133.9156 34.65208, 133.9125 3…
緯度経度から地域メッシュを得ることもできます。これにはcoords_to_mesh()
を利用します。引数に緯度と経度を与え、取得対象のメッシュコードの大きさを指定します。メッシュコードの大きさの初期値は標準地域メッシュ、すなわち1kmメッシュです。
coords_to_mesh(133, 34)
## [1] "51330000"
coords_to_mesh(133, 34, mesh_size = "80km")
## [1] "5133"
coords_to_mesh(133, 34, mesh_size = "125m")
## [1] "51330000111"
また対象の地域メッシュ内に含まれる緯度経度からスケールダウンした地域メッシュや、隣接するメッシュコードを得ることができます。
# 80kmメッシュに含まれる10kmメッシュを返します
coords_to_mesh(133, 34, "80km") %>%
fine_separate()
## [1] "513300" "513301" "513302" "513303" "513304" "513305" "513306"
## [8] "513307" "513310" "513311" "513312" "513313" "513314" "513315"
## [15] "513316" "513317" "513320" "513321" "513322" "513323" "513324"
## [22] "513325" "513326" "513327" "513330" "513331" "513332" "513333"
## [29] "513334" "513335" "513336" "513337" "513340" "513341" "513342"
## [36] "513343" "513344" "513345" "513346" "513347" "513350" "513351"
## [43] "513352" "513353" "513354" "513355" "513356" "513357" "513360"
## [50] "513361" "513362" "513363" "513364" "513365" "513366" "513367"
## [57] "513370" "513371" "513372" "513373" "513374" "513375" "513376"
## [64] "513377"
# 隣接するメッシュコードを同じスケールで返します
coords_to_mesh(133, 34, "80km") %>%
neighbor_mesh()
## [1] "5032" "5033" "5034" "5132" "5133" "5134" "5232" "5233" "5234"
coords_to_mesh(133, 34, "500m") %>%
neighbor_mesh()
## [1] "503277994" "503370903" "503370904" "513207092" "513207094" "513300003"
## [7] "513300004" "513300001"
jpmeshでは、都道府県および市区町村名を含んだ基準地域メッシュのデータセットを用意しています。これを利用することで、都道府県や市区町村単位での地域メッシュを扱うことができます。
administration_mesh(code = 33, type = "prefecture") %>%
head() %>%
knitr::kable(format = "markdown")
meshcode | lng_center | lat_center | lng_error | lat_error | geometry |
---|---|---|---|---|---|
513376 | 133.8125 | 34.62500 | 0.0625 | 0.0416667 | list(c(133.75, 133.875, 133.875, 133.75, 133.75, 34.58333, 34.58333, 34.66667, 34.66667, 34.58333)) |
513377 | 133.9375 | 34.62500 | 0.0625 | 0.0416667 | list(c(133.875, 134, 134, 133.875, 133.875, 34.58333, 34.58333, 34.66667, 34.66667, 34.58333)) |
523305 | 133.6875 | 34.70833 | 0.0625 | 0.0416667 | list(c(133.625, 133.75, 133.75, 133.625, 133.625, 34.66667, 34.66667, 34.75, 34.75, 34.66667)) |
523306 | 133.8125 | 34.70833 | 0.0625 | 0.0416667 | list(c(133.75, 133.875, 133.875, 133.75, 133.75, 34.66667, 34.66667, 34.75, 34.75, 34.66667)) |
523307 | 133.9375 | 34.70833 | 0.0625 | 0.0416667 | list(c(133.875, 134, 134, 133.875, 133.875, 34.66667, 34.66667, 34.75, 34.75, 34.66667)) |
523315 | 133.6875 | 34.79167 | 0.0625 | 0.0416667 | list(c(133.625, 133.75, 133.75, 133.625, 133.625, 34.75, 34.75, 34.83333, 34.83333, 34.75)) |
sessionInfo()
## R version 3.4.3 (2017-11-30)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Debian GNU/Linux 9 (stretch)
##
## Matrix products: default
## BLAS: /usr/lib/openblas-base/libblas.so.3
## LAPACK: /usr/lib/libopenblasp-r0.2.19.so
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=C
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] bindrcpp_0.2 purrr_0.2.4 dplyr_0.7.4 sf_0.6-0 jpmesh_1.1.0
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.15 highr_0.6 pillar_1.1.0
## [4] compiler_3.4.3 bindr_0.1 prettyunits_1.0.2
## [7] progress_1.1.2.9002 class_7.3-14 tools_3.4.3
## [10] digest_0.6.15 evaluate_0.10.1 tibble_1.4.2
## [13] pkgconfig_2.0.1 rlang_0.2.0.9000 cli_1.0.0.9001
## [16] shiny_1.0.5 DBI_0.7 crosstalk_1.0.0
## [19] yaml_2.1.16 e1071_1.6-8 withr_2.1.1.9000
## [22] xml2_1.2.0 stringr_1.3.0 knitr_1.20
## [25] hms_0.4.1 htmlwidgets_1.0 tidyselect_0.2.3
## [28] classInt_0.1-24 rprojroot_1.3-2 leaflet_1.1.0
## [31] grid_3.4.3 glue_1.2.0 R6_2.2.2
## [34] rmarkdown_1.8 selectr_0.3-1 tidyr_0.8.0
## [37] udunits2_0.13 magrittr_1.5 ansistrings_1.0.0.9000
## [40] backports_1.1.2 htmltools_0.3.6 units_0.5-1
## [43] assertthat_0.2.0 mime_0.5 xtable_1.8-2
## [46] httpuv_1.3.5 utf8_1.1.3 stringi_1.1.6
## [49] miniUI_0.1.1 crayon_1.3.4