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)
今回は、地球地図データの行政コードの修正を行い、そのデータで愛知県の地図を可視化しました。一度、全国地図のデータを作っておくと各地域の地図を作成する際に便利ですね。ただ、単独市町村などの地図になると境界域の荒さが気になるので、広域地図での利用がよいかなという印象です。市町村レベルでの地図を作成する場合には、もっと詳細なデータや個別地域の地図データを使うのがよいかと思います。
注)当記事に掲載している地図データは、国土地理院の地球地図日本データを加工して作成したものです。
参考資料
1)https://yutani.rbind.io/post/geom-sf-text-and-geom-sf-label-are-coming/