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)) # ラベルを付ける


ミサキ
ミサキ

summarise関数は、通常、数値の集計(合計や平均の計算)に使います!
ポリゴンの融合に使うのは、やや発展的な使い方かも知れませんね。
また、この記事は、QGISのこちらの記事と対応しています。


この記事で使用した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の記事は最後になります。
次回は、まとめ記事を作成します。
では。


YouTube: ミサキさん

問い合わせ先
Mail: caprico.aries@gmail.com
Twitter: https://twitter.com/caprico_aries(無言フォローもお気軽に)

コメント

  1. […] Rでポリゴンを融合する(実践編) | R, GIS […]

タイトルとURLをコピーしました