Rでポリゴンを融合する(実践編) | R, GIS

この記事では、Rを使ったポリゴン融合方法について説明します。

記事の概要です。

  1. 前回(準備編)に引き続き、茨城県を5つの地域に分けた地図を作成します。

  2. ポリゴンの融合には、dplyrパッケージのsummarise関数を使います。

  3. ポリゴン融合のあと、地域毎に色分けし、地域名を付与した地図を作成します。

ポリゴンを融合する部分です。
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同様、南部で一部の境界が残る。

南部で境界の一部が残ってしまいました。
これは、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の記事は最後になります。

いいなと思ったら応援しよう!