# How to use mesh cord in R

#### Shinya Uryu

#### 2022-01-10

## 概要

jpmeshパッケージは、日本国内で利用される「地域メッシュ（メッシュコード）」をRから容易に利用可能にするパッケージです。地域メッシュとは、日本国土を緯度・経度により方形の小地域区画に細分することで、同一の基準による統計調査などの結果を得ることが可能となります。80kmから100mまでのメッシュコードに対応し、メッシュコードと緯度経度座標との相互変換を行います。

jpmeshの主な機能として、「緯度経度からの地域メッシュへの変換」、「地域メッシュからの緯度経度の取得」、「都道府県単位やleaflet上へのマッピング」があります。なお地域メッシュと緯度経度の変換の基礎は竹中明夫さんのRコードが基礎となっています。ここではその使い方を紹介します。

パッケージをインストールしたら環境内で利用可能にするため、読み込みを行いましょう。また、このサンプルページで用いるパッケージも同時に読み込むようにしておきます。

    library(jpmesh)
    library(sf)
    library(purrr)

#### 緯度経度と地域メッシュの相互変換

`mesh_to_coords()`関数を利用し、緯度経度から地域メッシュを得ることができます。この関数では11桁までの細分地域メッシュに対応し、メッシュの中心座標とメッシュの範囲を示す値を返します。

    mesh_to_coords(5133)

    ## # A tibble: 1 × 5
    ##     meshcode lng_center lat_center lng_error lat_error
    ##   <meshcode>      <dbl>      <dbl>     <dbl>     <dbl>
    ## 1       5133       134.       34.3       0.5     0.333

    mesh_to_coords(513377)

    ## # A tibble: 1 × 5
    ##     meshcode lng_center lat_center lng_error lat_error
    ##   <meshcode>      <dbl>      <dbl>     <dbl>     <dbl>
    ## 1     513377       134.       34.6    0.0625    0.0417

    mesh_to_coords(51337783)

    ## # A tibble: 1 × 5
    ##     meshcode lng_center lat_center lng_error lat_error
    ##   <meshcode>      <dbl>      <dbl>     <dbl>     <dbl>
    ## 1   51337783       134.       34.7   0.00625   0.00417

得られるメッシュの領域データを使ってメッシュのポリゴンを作成する例です。

    export_mesh(5133778311)

    ## Geometry set for 1 feature
    ## Geometry type: POLYGON
    ## Dimension:     XY
    ## Bounding box:  xmin: 133.9125 ymin: 34.65 xmax: 133.9156 ymax: 34.65208
    ## Geodetic CRS:  WGS 84

    ## POLYGON ((133.9125 34.65, 133.9156 34.65, 133.9...

緯度経度から地域メッシュを得ることもできます。これには`coords_to_mesh()`を利用します。引数に緯度と経度を与え、取得対象のメッシュコードの大きさを指定します。メッシュコードの大きさの初期値は標準地域メッシュ、すなわち1kmメッシュです。

    coords_to_mesh(133, 34)

    ## <meshcode[1]>
    ## [1] 51330000

    coords_to_mesh(133, 34, to_mesh_size = 80)

    ## <meshcode[1]>
    ## [1] 5133

    coords_to_mesh(133, 34, to_mesh_size = 0.125)

    ## <meshcode[1]>
    ## [1] 51330000111

また対象の地域メッシュ内に含まれる緯度経度からスケールダウンした地域メッシュや、隣接するメッシュコードを得ることができます。

    # 80kmメッシュに含まれる10kmメッシュを返します
    coords_to_mesh(133, 34, to_mesh_size = 80) %>%
      fine_separate()

    ## <meshcode[64]>
    ##  [1] 513300 513301 513302 513303 513304 513305 513306 513307 513310 513311
    ## [11] 513312 513313 513314 513315 513316 513317 513320 513321 513322 513323
    ## [21] 513324 513325 513326 513327 513330 513331 513332 513333 513334 513335
    ## [31] 513336 513337 513340 513341 513342 513343 513344 513345 513346 513347
    ## [41] 513350 513351 513352 513353 513354 513355 513356 513357 513360 513361
    ## [51] 513362 513363 513364 513365 513366 513367 513370 513371 513372 513373
    ## [61] 513374 513375 513376 513377

    # 隣接するメッシュコードを同じスケールで返します
    coords_to_mesh(133, 34, to_mesh_size = 80) %>%
      neighbor_mesh()

    ## <meshcode[9]>
    ## [1] 5032 5033 5034 5132 5133 5134 5232 5233 5234

    coords_to_mesh(133, 34, 0.5) %>%
      neighbor_mesh()

    ## <meshcode[9]>
    ## [1] 503277994 503370903 503370904 513207092 513207094 513300001 513300002
    ## [8] 513300003 513300004

#### 都道府県単位での基準地域メッシュの描画

jpmeshでは、都道府県および市区町村名を含んだ基準地域メッシュのデータセットを用意しています。これを利用することで、都道府県や市区町村単位での地域メッシュを扱うことができます。

    administration_mesh(code = 33, to_mesh_size = 80) %>%
      head() %>%
      knitr::kable(format = "markdown")

meshcode | geometry
--- | ---
5133 | POLYGON ((133 34, 134 34, 1…
5233 | POLYGON ((133 34.66667, 134…
5234 | POLYGON ((134 34.66667, 135…
5134 | POLYGON ((134 34, 135 34, 1…
5333 | POLYGON ((133 35.33333, 134…
5334 | POLYGON ((134 35.33333, 135…

## Session Information

    sessionInfo()

    ## R version 4.1.2 (2021-11-01)
    ## Platform: x86_64-apple-darwin17.0 (64-bit)
    ## Running under: macOS Big Sur 10.16
    ##
    ## Matrix products: default
    ## BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
    ## LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
    ##
    ## locale:
    ## [1] C/ja_JP.UTF-8/ja_JP.UTF-8/C/ja_JP.UTF-8/ja_JP.UTF-8
    ##
    ## attached base packages:
    ## [1] stats     graphics  grDevices utils     datasets  methods   base
    ##
    ## other attached packages:
    ## [1] purrr_0.3.4  sf_1.0-5     jpmesh_2.1.0
    ##
    ## loaded via a namespace (and not attached):
    ##  [1] tidyselect_1.1.1   xfun_0.29          bslib_0.3.1        vctrs_0.3.8
    ##  [5] generics_0.1.1     miniUI_0.1.1.1     htmltools_0.5.2    s2_1.0.7
    ##  [9] yaml_2.2.1         utf8_1.2.2         rlang_0.4.12       e1071_1.7-9
    ## [13] jquerylib_0.1.4    later_1.3.0        pillar_1.6.4       glue_1.6.0
    ## [17] DBI_1.1.2          wk_0.6.0           lifecycle_1.0.1    stringr_1.4.0
    ## [21] htmlwidgets_1.5.4  memoise_2.0.1      evaluate_0.14      knitr_1.37
    ## [25] fastmap_1.1.0      httpuv_1.6.5       crosstalk_1.2.0    class_7.3-19
    ## [29] fansi_0.5.0        highr_0.9          Rcpp_1.0.7         KernSmooth_2.23-20
    ## [33] xtable_1.8-4       promises_1.2.0.1   classInt_0.4-3     cachem_1.0.6
    ## [37] leaflet_2.0.4.1    jsonlite_1.7.2     mime_0.12          digest_0.6.29
    ## [41] stringi_1.7.6      dplyr_1.0.7        shiny_1.7.1        grid_4.1.2
    ## [45] cli_3.1.0          tools_4.1.2        magrittr_2.0.1     sass_0.4.0
    ## [49] proxy_0.4-26       tibble_3.1.6       crayon_1.4.2       pkgconfig_2.0.3
    ## [53] ellipsis_0.3.2     rstudioapi_0.13    assertthat_0.2.1   rmarkdown_2.11
    ## [57] R6_2.5.1           units_0.8-0        compiler_4.1.2