{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 | 北斗市 |
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)