How to use mesh cord in R

Shinya Uryu

2017-12-04

概要

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      133.5   34.33333       0.5 0.3333333
mesh_to_coords(513377)
## # A tibble: 1 x 4
##   lng_center lat_center lng_error  lat_error
##        <dbl>      <dbl>     <dbl>      <dbl>
## 1   133.9375     34.625    0.0625 0.04166667
mesh_to_coords(51337783)
## # A tibble: 1 x 4
##   lng_center lat_center lng_error   lat_error
##        <dbl>      <dbl>     <dbl>       <dbl>
## 1   133.9187   34.65417   0.00625 0.004166667

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

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):    NA
## proj4string:    NA
## POLYGON ((133.9125 34.65, 133.915625 34.65, 133...
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.915625 34.65, 133.915625 34.65208333335, 133.

緯度経度から地域メッシュを得ることもできます。これにはlatlong_to_meshcode()を利用します。引数に緯度と経度を与え、取得対象のメッシュコードの大きさを指定します。メッシュコードの大きさの初期値は標準地域メッシュ、すなわち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] "513311" "513312" "513313" "513314" "513315" "513316" "513317"
##  [8] "513318" "513321" "513322" "513323" "513324" "513325" "513326"
## [15] "513327" "513328" "513331" "513332" "513333" "513334" "513335"
## [22] "513336" "513337" "513338" "513341" "513342" "513343" "513344"
## [29] "513345" "513346" "513347" "513348" "513351" "513352" "513353"
## [36] "513354" "513355" "513356" "513357" "513358" "513361" "513362"
## [43] "513363" "513364" "513365" "513366" "513367" "513368" "513371"
## [50] "513372" "513373" "513374" "513375" "513376" "513377" "513378"
## [57] "513381" "513382" "513383" "513384" "513385" "513386" "513387"
## [64] "513388"
# 隣接するメッシュコードを同じスケールで返します
coords_to_mesh(133, 34, "80km") %>% 
  find_neighbor_mesh()
## [1] 5032 5033 5034 5132 5133 5134 5232 5233 5234
coords_to_mesh(133, 34, "500m") %>% 
  find_neighbor_mesh()
## [1] 513299894 513299903 513299904 513299992 513299994 513300001 513300002
## [8] 513300003 513300004

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

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 133.75000, 133.87500, 133.87500, 133.75000, 133.75000, 34.58333, 34.58333, 34.66667, 34.66667, 34.58333
513377 133.9375 34.62500 0.0625 0.0416667 133.87500, 134.00000, 134.00000, 133.87500, 133.87500, 34.58333, 34.58333, 34.66667, 34.66667, 34.58333
523305 133.6875 34.70833 0.0625 0.0416667 133.62500, 133.75000, 133.75000, 133.62500, 133.62500, 34.66667, 34.66667, 34.75000, 34.75000, 34.66667
523306 133.8125 34.70833 0.0625 0.0416667 133.75000, 133.87500, 133.87500, 133.75000, 133.75000, 34.66667, 34.66667, 34.75000, 34.75000, 34.66667
523307 133.9375 34.70833 0.0625 0.0416667 133.87500, 134.00000, 134.00000, 133.87500, 133.87500, 34.66667, 34.66667, 34.75000, 34.75000, 34.66667
523315 133.6875 34.79167 0.0625 0.0416667 133.62500, 133.75000, 133.75000, 133.62500, 133.62500, 34.75000, 34.75000, 34.83333, 34.83333, 34.75000