Rでポリゴンを融合する(実践編) | R, GIS
この記事では、Rを使ったポリゴン融合方法について説明します。
記事の概要です。
前回(準備編)に引き続き、茨城県を5つの地域に分けた地図を作成します。
ポリゴンの融合には、dplyrパッケージのsummarise関数を使います。
ポリゴン融合のあと、地域毎に色分けし、地域名を付与した地図を作成します。
ポリゴンを融合する部分です。
dplyrパッケージのsummarise関数を使います。
shpTiiki <- shp %>% group_by(N03_002) %>% summarise
N03_002は5つの地域名が格納されたカラムです。
こちらはソースコード全体(前回記載した分は略)です。
## これより下は「実践編」
shp # 確認:前回の内容
## ポリゴンを融合する
shpTiiki <- shp %>% group_by(N03_002) %>% summarise
shpTiiki # 確認:融合
## 描画
library(ggplot2)
ggplot(shpTiiki) + geom_sf()
ggplot(shpTiiki) + geom_sf(aes(fill = N03_002)) + # 地域を色分けする
scale_fill_brewer("", palette = "Set2") # 目にやさしいパレット
ggplot(shpTiiki) + geom_sf(aes(fill = N03_002)) +
scale_fill_brewer("", palette = "Set2") +
geom_sf_text(aes(label = N03_002)) # ラベルを付ける
この記事で使用したRとパッケージのバージョンを記載しておきます。
R 3.6.1
sf 0.7-6
dplyr 0.8.3
ggplot2 3.2.0
前回の内容確認
前回は、茨城県のシェープファイルに地域区分(県北・県央・鹿行(ろっこう)・県南・県西)の属性情報を付与しました。
地域区分が付与されたシェープファイルを確認しましょう。
shp # 確認:前回の内容
Simple feature collection with 162 features and 5 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: 139.6877 ymin: 35.73914 xmax: 140.852 ymax: 36.9453
epsg (SRID): NA
proj4string: +proj=longlat +ellps=GRS80 +no_defs
First 10 features:
N03_001 N03_002 N03_003 N03_004 N03_007 geometry
1 茨城県 県央 水戸市 08201 POLYGON ((140.3894 36.46392...
2 茨城県 県北 日立市 08202 POLYGON ((140.6364 36.47452...
3 茨城県 県北 日立市 08202 POLYGON ((140.6301 36.48646...
4 茨城県 県北 日立市 08202 POLYGON ((140.6305 36.49491...
5 茨城県 県北 日立市 08202 POLYGON ((140.6388 36.49908...
6 茨城県 県北 日立市 08202 POLYGON ((140.6353 36.50807...
7 茨城県 県北 日立市 08202 POLYGON ((140.6463 36.5421,...
8 茨城県 県北 日立市 08202 POLYGON ((140.6467 36.54221...
9 茨城県 県北 日立市 08202 POLYGON ((140.6476 36.54248...
10 茨城県 県北 日立市 08202 POLYGON ((140.6506 36.54408...
N03_002のカラムに5つの地域名が格納されていますね。
ポリゴンの融合
では、地域毎にポリゴンを融合します。
ポリゴンの融合によって、地域内にある市町村の境界は無くなり、地域で一つのポリゴンになります。
ポリゴンの融合には、dplyrパッケージのsummarise関数を使います。
shpTiiki <- shp %>% group_by(N03_002) %>% summarise
group_by(N03_002)で地域毎にポリゴンデータ(行単位のデータ)をグループ化しています。
そして、summariseでグループ単位でのデータ集計とポリゴンの融合を行っています。
ただ、今回は集計するデータが無いので、ポリゴンの融合のみです。
確認しましょう。
shpTiiki # 確認:融合
Simple feature collection with 5 features and 1 field
geometry type: GEOMETRY
dimension: XY
bbox: xmin: 139.6877 ymin: 35.73914 xmax: 140.852 ymax: 36.9453
epsg (SRID): NA
proj4string: +proj=longlat +ellps=GRS80 +no_defs
# A tibble: 5 x 2
N03_002 geometry
*
1 県央 MULTIPOLYGON (((140.6394 36.39718, 140.6392 36.39708, 140.6385 36.398~
2 県西 POLYGON ((139.9981 36.13573, 139.998 36.13556, 139.998 36.13538, 139.~
3 県南 POLYGON ((140.379 35.90313, 140.3769 35.90259, 140.3759 35.90238, 140~
4 県北 MULTIPOLYGON (((140.6364 36.47452, 140.6363 36.47452, 140.6363 36.475~
5 鹿行 MULTIPOLYGON (((140.8415 35.75027, 140.8413 35.7501, 140.8411 35.7502~
たしかに、グループ(地域)単位でポリゴンが融合されていますね。
【参考】
もし、N03_008に市町村の人口が格納されている場合、以下のようにすると、地域毎の合計人口と融合されたポリゴンが得られます。
shp %>% group_by(N03_002) %>% summarise(JINKO = sum(N03_008))
融合したポリゴンの描画
融合したポリゴンを描画しましょう。
library(ggplot2)
ggplot(shpTiiki) + geom_sf()
南部で境界の一部が残ってしまいました。
これは、QGISのときにも発生しています。
そのため、もしかしてシェープファイル側に問題があるのかも知れません。
地域毎に色付けしましょう。
デフォルトよりも、目にやさしいパレットを使っています。
ggplot(shpTiiki) + geom_sf(aes(fill = N03_002)) + # 地域を色分けする
scale_fill_brewer("", palette = "Set2") # 目にやさしいパレット
最後に、地域名を付与します。
こちらの記事では複雑なことをしましたが、geom_sf_text (又は、geom_sf_label)関数により、簡単にラベル付けできることが分かりました。
ggplot(shpTiiki) + geom_sf(aes(fill = N03_002)) +
scale_fill_brewer("", palette = "Set2") +
geom_sf_text(aes(label = N03_002)) # ラベルを付ける
以上の地図が表示されれば、完了です。
おわりに
お疲れさまでした。
今回で、QGISに対応したRの記事は最後になります。