QGISで滑らかな等高線を作成する

QGISで描画した等高線が滑らかではない場合があります。測量データからDEMを作成して等高線を描画した場合の多くは、過剰に微細地形を拾ってしまいます。滑らかな等高線を得るための「平滑化」という手法について解説します。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/17231585-5176-67fa-2175-7fcc2310da25.png)

標高差を過剰に拾ってしまっているのがわかります。特に、データが足りないところは角ばったラインになってしまいます。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/27dd63d7-75fc-b2f6-1499-93495c638fb8.png)

# GRASS GISのr.mapcalcを使う

プロセッシング→ツールボックス
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/a4aa50da-fb49-2daa-d591-d74409a9c77f.png)

GRASS→ラスタ
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/c6ca47fa-9f05-cb6f-e8b6-c9aafc8a57bb.png)

r.mapcalc.simpleをクリック
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/20978491-98a5-5ea2-f0ec-065d3ae51179.png)

1. ラスタA：DEMを指定（プルダウンメニューに表示中のラスタデータの一覧が表示されます）
2. 計算式：`(A[-1,-1]+A[0,-1]+A[1,-1]+A[-1,0]+A[0,0]+A[1,0]+A[-1,1]+A[0,1]+A[1,1])/9`

![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/742cd41c-08cb-8e2d-b5a9-a57b3178f8da.png)
3. 下の方にスクロールして保存先を指定
4. 「raster_10cm_smooth01.tif」で保存
5. 「実行」
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/f6dc8048-0195-4116-e70f-43ce712287c4.png)

エラーメッセージが表示されますが、気にしなくてだ丈夫です。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/e488a829-639f-eca1-9069-a6094810878a.png)

新たなDEMが作成されました。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/9d686abf-d4ac-5567-2d8e-4d3b4a7c39b5.png)

このままではよくわからないので等高線を生成します。
ラスタ→抽出→等高線（contour）
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/e86333ca-2956-f4ea-2a91-acd0a6b24c6c.png)

1. 入力ラスタ：（上の処理で作成したDEMを指定）
2. 等高線の間隔：任意ですが、ここでは0.5mを指定
3. 「実行」
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/317b9196-61fd-9de9-da6b-2f2e4a05ebaa.png)

灰色が元の等高線、赤色が平滑化後の等高線です。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/526c1efd-eba4-f5f6-a294-be6321fd53f8.png)

# さらに平滑化する
平滑化の処理は重ねて行うことができます。先ほど平滑化処理したDEMにもう一度同じ手順を施すと、さらに滑らかになります。
1. r.mapcalc.simple
2. ラスタA：先に生成した平滑化したDEM
3. 計算式：`(A[-1,-1]+A[0,-1]+A[1,-1]+A[-1,0]+A[0,0]+A[1,0]+A[-1,1]+A[0,1]+A[1,1])/9`
4. 「実行」（ファイルの保存先を指定すること）
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/78ec5981-a093-b062-b0a4-bf2b7876eb37.png)

1. ラスタA：上記で生成した2回目平滑化DEM
2. 等高線の間隔：0.5m
3. 「実行」
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/49023fb3-a0ca-0d4c-57fe-9c2f716901fa.png)

赤線が平滑化1回目の等高線、青線が平滑化2回目の等高線
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/f994a992-1651-f00f-3900-2e983462d159.png)

# 満足のいくまで平滑化
平滑化処理を5回おこなったDEMから等高線を発生させました。
グレーが平滑化前、赤色が平滑化処理5回です。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/ce3de782-542f-5db9-a405-9d945f5b72e6.png)

図面全体の仕上がり。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/fa20b4fe-03ec-a19e-4151-b63032739121.png)

# 平滑化の計算式
`r.mapcalc.simple`コマンドで使用した計算式は次のとおりです。
`(A[-1,-1]+A[0,-1]+A[1,-1]+A[-1,0]+A[0,0]+A[1,0]+A[-1,1]+A[0,1]+A[1,1])/9`

`A[x,y]`はDEMラスタの要素（個別のデータ点）にアクセスする記法です。ここでは、DEMの個別の要素（画素）とその周囲8点の平均を計算しています。

![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/85bb0448-ae40-8313-63b9-4d7e42736534.png)