概要

{jpmesh}パッケージは、日本国内で利用される「地域メッシュ」をR上で扱えるようにするパッケージです。地域メッシュとは、日本国土を緯度・経度により方形の小地域区画に細分することで、同一の基準による統計調査などの結果を得ることが可能となります。このような経緯度に基づくジオコーディングの手法としてgeohashがありますが、日本国内では地域メッシュ、特に基準地域メッシュが利用されています。

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

使い方

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

パッケージはGitHubからインストールします。CRANへの申請は2016年以内に行う予定です。

install.packages("devtools")
devtools::install_github("uribo/jpmesh")

主要な機能

パッケージをインストールしたら環境内で利用可能にするため、読み込みを行いましょう。

library(jpmesh)

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

meshcode_to_latlon()関数を利用し、緯度経度から地域メッシュを得ることができます。この関数では8桁までの地域メッシュに対応し、メッシュの中心座標とメッシュの範囲を示す値を返します。より細かな分割地域メッシュから緯度経度を得るには、試験的な関数fine_mesh_to_latlon()を使ってください。

meshcode_to_latlon(5133)
##   lat_center long_center lat_error long_error
## 1   34.33333       133.5 0.3333333        0.5
meshcode_to_latlon(513377)
##   lat_center long_center  lat_error long_error
## 1     34.625    133.9375 0.04166667     0.0625
meshcode_to_latlon(51337783)
##   lat_center long_center   lat_error long_error
## 1   34.65417    133.9187 0.004166667    0.00625
jpmesh:::fine_mesh_to_latlon(5133778311)
##   lat_center long_center   lat_error long_error
## 1   34.65104    133.9141 0.004166667    0.00625

反対に緯度経度から地域メッシュを得ることもできます。これにはlatlong_to_meshcode()を利用します。引数に緯度と経度を与え、取得対象のメッシュコードの大きさを指定します。

latlong_to_meshcode(34, 133, order = 1)
## [1] 5133
latlong_to_meshcode(34.583333, 133.875, order = 2)
## [1] 513367
latlong_to_meshcode(34.65, 133.9125, order = 3)
## [1] 51337782

分割地域メッシュの値を得るにはlatlong_to_sepate_mesh()を利用します。この関数は現在、1/2地域メッシュ、1/4地域メッシュまでに対応しています。

latlong_to_sepate_mesh(35.442788, 139.301255, order = "harf")
## [1] 533912341
latlong_to_sepate_mesh(35.442788, 139.301255, order = "quarter")
## [1] 5339123411

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

detect_mesh(52350422, lat = 34.684176, long = 135.526130)
## [1] 523504221
detect_mesh(523504221, lat = 34.684028, long = 135.529506)
## [1] NA

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

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

library(dplyr)

data("jpmesh.pref")
jpmesh.pref %>% head() %>% knitr::kable(format = "markdown")
jiscode long lat order group id city_code city_name
01 140.5500 41.72500 1 62404464.1 62404464 01236 北斗市
01 140.5625 41.72500 2 62404464.1 62404464 01236 北斗市
01 140.5625 41.71667 3 62404464.1 62404464 01236 北斗市
01 140.5500 41.71667 4 62404464.1 62404464 01236 北斗市
01 140.5500 41.72500 5 62404464.1 62404464 01236 北斗市
01 140.5375 41.73333 1 62404473.1 62404473 01236 北斗市

leafletを使った可視化の例

library(leaflet)

d <- meshcode_to_latlon(52350422) %>% 
  dplyr::mutate(lng1 = long_center - long_error,
                lat1 = lat_center - lat_error,
                lng2 = long_center + long_error,
                lat2 = lat_center + lat_error) %>% 
  tibble::rownames_to_column()

d2 <- mesh_area(523504221, order = "harf")
d3 <- mesh_area(5235042212, order = "quarter")
d4 <- mesh_area(52350422123, order = "eight")
d5 <- mesh_area(52350422124, order = "eight")

leaflet() %>% 
  addTiles() %>% 
  addRectangles(data = d,
                lng1 = d$lng1, lat1 = d$lat1,
                lng2 = d$lng2, lat2 = d$lat2, fillColor = "red") %>%
  addRectangles(data = d2,
                lng1 = d2$lng1, lat1 = d2$lat1,
                lng2 = d2$lng2, lat2 = d2$lat2, fillColor = "red") %>%
  addRectangles(data = d3,
                lng1 = d3$lng1, lat1 = d3$lat1,
                lng2 = d3$lng2, lat2 = d3$lat2, fillColor = "red") %>% 
  addRectangles(data = d4,
                lng1 = d4$lng1, lat1 = d4$lat1,
                lng2 = d4$lng2, lat2 = d4$lat2, fillColor = "red") %>% 
  addRectangles(data = d5,
                lng1 = d5$lng1, lat1 = d5$lat1,
                lng2 = d5$lng2, lat2 = d5$lat2, fillColor = "red")
library(purrr)

meshes <- fine_separate(52350422, "harf")
res <- meshes %>% 
  fine_separate(52350422, "harf") %>%
  purrr::map(mesh_area, order = "harf") %>%
  purrr::map_df(~ .[c("lng1", "lat1", "lng2", "lat2")])
res$mesh <- meshes

leaflet() %>% 
  addTiles() %>% 
  addRectangles(data = res,
                lng1 = res$lng1, lat1 = res$lat1,
                lng2 = res$lng2, lat2 = res$lat2)