QGISで微小ポリゴンの削除

この投稿は、[地震情報アプリ界隈 Advent Calendar 2021](https://adventar.org/calendars/6729) の3日目の記事です。
昨日は、soshi1822さんの [リアルタイムに防災情報を配信をするために](https://qiita.com/soshi1822/items/b193931e2617cd8f2cdd) でした。

# はじめに
GISデータは、防災情報を扱う上で欠かせないデータのひとつです。
そのなかでも、国土地理院や気象庁などが提供するGISデータは有難いことにとても親切で、港湾構造物など非常に面積の小さいポリゴンについてもしっかりとデータ収録が行われています。ただ、府県単位や地方単位で地図を作りたいといった場合、平方メートルオーダーのポリゴンまでは地図に載せなくても良かったりします。
そこで今回は、指定した面積未満のポリゴンを削除する方法を紹介します。

なお以下では、QGIS 3.12.1 を使用しています。

# 微小ポリゴンの削除
## 単位の設定
まず、ウィンドウ左上の `プロジェクト` メニューからプロパティを開きます。
そのなかで真ん中やや上にある `計測` の `面積計測の単位` を確認しておきます。今回は `平方メートル` になっていますが、選択により `平方キロメートル` などを指定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/591f1eef-aad8-d91f-4523-7c597555131a.png)
単位の確認後は、プロパティウィンドウを閉じます。

## シェープファイルの読み込み
今回は、気象庁GISデータのうち、地震情報／都道府県等のデータを使います。
データは、 [気象データ高度利用ポータルサイト](https://www.data.jma.go.jp/developer/index.html) にある [予報区等GISデータの一覧](https://www.data.jma.go.jp/developer/gis.html) からダウンロードできます。

ダウンロードしたshpファイルについて、ベクタレイヤの追加を行うと以下のように日本地図が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/e1e7fff9-e489-9a7d-709a-9e9938475be7.png)（地図データの出典：[気象庁ホームページ](https://www.data.jma.go.jp/developer/gis.html)）

ここで、読み込んだレイヤ名（上の画像中の左側で選択されている部分）を右クリックしてプロパティを開きます。
気象庁のGISデータ特有の現象かもしれませんが、初期設定のままだと**地物データが文字化けしている**ため、エンコーディングを `UTF-8` に設定します。
また、その下にある座標参照系の設定について、 `プロジェクトCRS: EPSG:4326 - WGS 84` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/1eb3e7f7-e2b9-9a9d-c1b6-7c2c8a1a9853.png)
設定後は、ウィンドウを閉じます。

## マルチパートをシングルパートに変換
今回は、海ほたるPAのある人工島を例として、面積の小さいポリゴンを削除することにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/8df14390-d3eb-e539-a43f-752593eeddc9.png)

### だめな例
海ほたるにクローズアップして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/6f74f69f-1d23-978b-6942-dbbaa218097e.png)

黄色い四角のあるメニューを押してから地物を選択、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/4623ee49-d674-8e07-f869-8a72480d37e9.png)

鉛筆のメニューから編集モードを切り替えて、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/25b74fe8-95a2-d97d-7890-7d0f2e932e85.png)

赤いゴミ箱メニューを押して地物を削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/0e53c967-cc1e-d55e-8f60-f5ee1cb227e7.png)

ズームアウトすると…千葉県が消滅しています。悲しいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/6c846e0c-5124-2a9a-f8a2-ef72d6cf283b.png)
これは、**海ほたるPAが千葉県に属しているために、地物選択によって千葉県全体が選択された**のが原因です。
したがって、微小ポリゴンの削除をする際は、同じグループに属するポリゴン同士をそれぞれ別のものとして認識させてあげる必要があります。

### よい例
まず、 `ベクタ` メニューの `ジオメトリツール` から `マルチパートをシングルパートに変換…` をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/0ad09ef2-7a93-f305-92c9-f6e98d0f785e.png)

右下の `実行` を押すと、変換が実行されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/f2223065-b646-3917-0351-aaf392dc1bd9.png)

新しく `出力レイヤ` という名前のレイヤが生成されました。このレイヤでは、各ポリゴンが別グループとして扱われています。したがって、海ほたるは海ほたるであり、他の千葉県の領域に影響を及ぼしません。
なお、既存の `地震情報／都道府県等` レイヤはチェックボックスを外して非表示にしておきましょう。また、レイヤ名は各自で分かりやすいように変えても構いませんが、ここではそのままにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/c2d20b3b-c6b3-8c48-0d92-2add7277213e.png)

再び海ほたるを選択してみます。今回は、千葉県は選択されていないことが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/7ce726b0-1eb9-695a-9606-b7afbba62091.png)

これは実行しなくて良いですが、もし好奇心からこの状態で地物の削除を行ってしまうと、**海ほたるのみが消滅**します。
もし実行してしまったら、もとに戻してあげてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/858c0906-dc21-313a-d9bf-e68953094466.png)

## 面積の確認
青いiマークのある `地物情報の表示` メニューを押して、海ほたるPAを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/b553323e-38a2-1e3c-0e49-64abc181097a.png)

すると、以下のような地物情報ウィンドウが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/a64cf875-8528-ad3d-c9da-fb73a4c35296.png)
 `(派生した属性)` を展開すると、 `面積（楕円体 ― EPSG:7030）` 欄に `75941.908 m^2` と書かれているのが分かります。これが、海ほたるPAのある人工島の面積です。

## ポリゴンの削除
海ほたるPAが約7.5万平方メートルですから、今回は約10万平方メートル（＝約0.1平方キロメートル）未満のポリゴンを削除してみます。
`プロセシング` メニューから、`ツールボックス` を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/c416ad7b-d559-7975-6751-ad6fb7da4b6b.png)

`ベクタ選択` 内の `QGIS式による抽出` をダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/ae5e674d-d160-1172-53e2-717c7e82f2b8.png)

イプシロンのあるボタンをクリックして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/bbc1d2a5-0bae-0862-2b84-4a381d8b50e1.png)

`$area >= 100000` と入力しましょう。この場合は、面積が10万平方メートル以上の場合に抽出対象となります。従って、10万平方メートル未満は除外されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/947026cc-3039-b9e9-a949-b1ba7c77a8ff.png)

実行ボタンを押すと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/513155e4-8c22-ab3d-23f2-c24b3e0a9800.png)

海ほたるPAを含む微小ポリゴンを削除できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/b922ca40-b62d-9869-447f-66ac028f5da3.png)
なお、実行時に `マッチしなかった地物` についても設定すると、海ほたるを含む微小ポリゴンのみが含まれたレイヤーが生成されます。

## シングルパートをマルチパートに集約
ポリゴン削除で充分であればこの作業は不要ですが、「やっぱり千葉県は千葉県でグループにしておきたい！」といった場合はマルチパートへの集約もしておきましょう。

シングルパートに変換するときと同様、ジオメトリツールからアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/54110c59-ed17-127f-c8cc-abd2903014cd.png)

属性（フィールド）をすべて選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/c50aa098-03a1-b2e8-4f62-9157dec30eee.png)

実行してみましょう。試しに東京都を選択してみると、複数のポリゴンが同時に選択されていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565515/20517582-d7e6-e40c-86ba-288accf51f3d.png)

#おわりに
今回は、微小ポリゴンの削除方法を紹介しました。説明が冗長になってしまいましたが、大まかな流れとしては、

1. マルチパートをシングルパートに変換
1. QGIS式を使ってポリゴンを抽出（削除）
1. シングルパートをマルチパートに戻す

となります。これで微小ポリゴンから開放された素敵なGISライフを送りましょう。

---
[地震情報アプリ界隈 Advent Calendar 2021](https://adventar.org/calendars/6729) の4日目担当は ingen084 さんです。よろしくお願いします！