ykogajpのブログ

勉強していることなどメモしていきます

R学習(3):国土地理院の地球地図データを使った日本地図の可視化 part2

前回記事では、国土地理院地球地図データを使って日本地図を可視化しました。今回は、地球地図データの修正(行政コードの修正)を行います。
まずは、利用するパッケージを読み込みます。

#パッケージの読み込み
library(sf)
library(dplyr)
library(readr)
library(ggplot2)

行政界データを読み込み、そのうち都道府県名(nam)、市町村名(laa), 行政コード(adm_code)、空間情報(geometry)の列データを抽出します。

#データの読み込み
map_jpn <- st_read(dsn = "data/polbnda_jpn.shp")
#必要なデータのみ抽出
map_jpn <-
  map_jpn %>%
  select("nam", "laa", "adm_code", "geometry")

9市町村の行政コードの修正をします。まず、秋田県東成瀬村島根県隠岐の島町は複数あるポリゴンデータで行政コードが異なっているため統一。次に、その他の7市町村(岩手県滝沢市宮城県富谷町、埼玉県白岡市、千葉県大網白里市、石川県野々市市、愛知県長久手市熊本県熊本市)は、市制施行前の行政コードになっているため、施行後のコードに修正します。ifelse()で、対象市町村に行政コードを再設定します。

#データの修正
i <- c("Higashinaruse Mura", "Okinoshima Cho", "Takizawa Shi", "Tomiya Machi", "Shiraoka Shi", "Oamishirasato Shi", "Nonoichi Shi", "Nagakute Shi", "Kumamoto Shi")
j <- c("05464", "32528", "03216", "04216", "11246", "12239", "17212", "23238", "43100")
for(k in 1:9){
  map_jpn$adm_code <- ifelse(map_jpn$laa == i[k], j[k], as.character(map_jpn$adm_code))
}

修正を終えたら、行政コードにもとづいて統合します。統合した結果、1748オブジェクトになり、内訳は市町村が1724、特別区が23、所属未定地が1になります。

#行政コード(adm_code)をもとに統合
map_jpn <- map_jpn %>%
  group_by(adm_code) %>%
  summarise("")

修正したシェイプデータは行政コードと空間データのみとなっていますので、都道府県名と市町村名のデータを追加します。 総務省全国地方公共団体コードhttp://www.soumu.go.jp/denshijiti/code.html)で行政コードと自治体名の一覧データが入手できるので、そのデータをダウンロードして利用します。データには、「団体コード」、「都道府県名」、「市区町村名」、「都道府県名(カナ)」、「市区町村名(カナ)」のデータが格納されており、今回は「都道府県名(カナ)」、「市区町村名(カナ)」は削除し、列名を「都道府県名」から「pref_name」、「市区町村名」から「city_name」、「団体コード」から「adm_code」に修正しました。

pref_name city_name adm_code
北海道 01000
北海道 札幌市 01100
北海道 函館市 01202
北海道 小樽市 01203

修正したデータは、csvファイルで保存して、Rで読み込み地図データと結合していきます。

#csvファイルの読み込み
gov_code <- read_csv("csv/gov_code.csv")
#結合する
map_jpn <-
  left_join(map_jpn, gov_code, by ="adm_code")

結合したデータを保存します。以降、全国の地図データを使いたい場合にはこのデータを使えます。

#shape形式とGeoJSON形式で保存してみます。
st_write(map_jpn, "shape/map_jpn.shp", layer_options="ENCODING=UTF-8")
st_write(map_jpn, "geojson/map_jpn.geojson")

それでは、修正した地図データを使って、今回は愛知県の地図を表示します。
まず、st_crs()=epsgコードで、epsgコードを3100(JGD2000、UTMゾーン54)に設定します。

map_jpn <-
  map_jpn %>%
  st_set_crs(4612) %>%
  st_transform(3100)

設定した後、filter()で愛知県を抽出して、ggplot()で愛知県の地図を可視化します。geom_sf_text()で市町村名を表示します。

#愛知県のマップ描画
map_jpn %>%
  filter(pref_name == "愛知県") %>%
  ggplot()+
  geom_sf()+
  geom_sf_text(aes(label = city_name), size = 2)

f:id:ykogajp:20190319161453p:plain
愛知県の地図
今回は、地球地図データの行政コードの修正を行い、そのデータで愛知県の地図を可視化しました。一度、全国地図のデータを作っておくと各地域の地図を作成する際に便利ですね。ただ、単独市町村などの地図になると境界域の荒さが気になるので、広域地図での利用がよいかなという印象です。市町村レベルでの地図を作成する場合には、もっと詳細なデータや個別地域の地図データを使うのがよいかと思います。

注)当記事に掲載している地図データは、国土地理院地球地図日本データを加工して作成したものです。

参考資料
1)https://yutani.rbind.io/post/geom-sf-text-and-geom-sf-label-are-coming/