QGIS3で点群から等高線をつくる(新版)

この記事にはひとつ古い記事があります。また、ひとつ新しい記事もあります。

●準備

まず、私がこれを書いているのは島根県ですので、QGISのプロパティでCRSをJGD2011/Japan Plane Rectangular CG III(EPSG:6671)にします。(本記事では以下、EPSG:6671と略します)
(これは各地域に適したものを選んでください)

使用するファイルはMetashapeの出力したテキスト形式の点群データでこういう中身です。(file名 ground.txt)Metashapeで出力したものをCloudCompareで編集し、樹木を削除しています。

80923.89062500 -54711.18359375 97.28199768 143 143 137 0.000000 -0.346338 -0.874237 -0.340235
80923.89843750 -54711.18359375 97.27700043 171 172 161 0.000000 -0.315159 -0.885158 -0.342301
80923.89062500 -54711.17968750 97.27899933 158 158 152 0.000000 -0.315275 -0.862776 -0.395247
80923.89843750 -54711.18359375 97.27700043 176 177 165 0.000000 -0.315768 -0.890436 -0.327740
80932.27343750 -54715.01171875 93.88600159 84 127 74 0.000000 -0.466380 -0.312490 0.827550

この座標のうち、最初の3列が座標です。

●点群の読み込み


[レイヤ]・[レイヤを追加]・[CSVテキストレイヤを追加] を実行します。

ファイル名=ground.txt
ジオメトリ定義でX,Y,Zを適切にセットします。
ここでは、東西がX、南北がYになります。
そしてCRSを間違えないこと。この座標はEPSG:6671のものですから注意。
「追加」そして「閉じる」

●TINメッシュを作成

点群をうまく読み込んだら、[プロセッシングツールボックス] 内の、[メッシュ]・[TINメッシュを作成] を開く。
等高線を作成する目的ですので、TINメッシュはとても重たいデータなので、残す必要はないと思われます。ここでは一時ファイルに保存します。


ベクタレイヤ=ground (読み込んだ点群)
「点の値にZ座標を使用する」にチェックの後、右の「+」ボタンを押す。
この状態で「実行」し、処理が完全に終わったら「閉じる」。


PCの速さ、メモリの量、点群の数などにもよるがかなり時間がかかる場合がある。

TINメッシュはこんなカラフルな画面になります。

次にこれをもとにDEMデータを作成します。

●DEMを生成する


[プロセッシングツールボックス] 内の[メッシュ]・[メッシュデータをラスタライズ] を開きます。

入力メッシュ=TIN Mesh
データセットグループは、右の「…▼」をクリックし、「現在アクティブなデータセットグループ」を選択。
領域は右の▼をクリックし、レイヤから計算のgroundを選びます。
ピクセルサイズは例えば、島根県の仕事であれば0.5m以下にします。なぜなら、土量の計算などに0.5mの精度を要求されるからです。
ここではデフォルトの1mにしています。
出力座標系=EPSG:6671
出力ラスタ=ground_dem.tif (ground.txtと同じフォルダに保存します)。tif形式のファイルです。
出力ラスタは右の「…▼」でファイルに保存を選びこのファイル名にします。
上記をセットしたら、「実行」し「閉じる」
グレースケールのDEMが出来ます。

TIN Meshのレイヤは削除します。

●DEMデータの修正の必要性

いま作ったDEMと最初の点群を比較します。
もとの点群の欠けているところにもDEMは出来ています。
これは樹木等の点群を除去したところも平均的に穴が埋まることを意味しますが、一方で周辺部でもともとデータのないところにもデータが出来てしまうのです。このDEMでは右下の部分です。
等高線を作る前に、この不要部分を削除します。
そのために、必要部分を包括するMaskレイヤを作ります。

DEMレイヤをオフにして点群を表示します。

●マスクレイヤを作成する


メニューより、
[レイヤ]・[レイヤを作成]・[新規シェープファイルレイヤ] を選びます。
ファイル名=mask.shp
ジオメトリ型=ポリゴン
CRSはEPSG:6671
最低限上記で「OK」しmaskレイヤを追加します。

maskレイヤを選択し、上部の鉛筆マーク「編集モード切替」をクリック、その右3つ目のポリゴン地物を追加をクリックします。
マウスのカーソルが丸に十字に変わります。
これでポリゴンを作っていきます。


左ボタンでポリゴンのエリアをつくり、終了したら右クリック、ポリゴンのidを選択のダイヤログが開くのでidをセットしなくてもよいので「OK」
最後にかならず、最初の鉛筆マーク「編集モード」をクリックし、保存します。これを忘れるとmask.shpは保存されていません!!
以上でマスクレイヤができあがりました。

●DEMの修正

このマスクレイヤを使ってDEMデータの不要な部分を削除します。

メニューから
[ラスタ]・[抽出]・[マスクレイヤで切り抜く] を選択し、


入力レイヤ=groune_dem
マスクレイヤ=mask

ずっと下がって、

出力ファイル=ground_dem2.tif

これで「OK」し「閉じる」。
切り取られた新しいDEMデータが出来上がりました。

●等高線の生成

次に、メニューの [ラスタ]・[抽出]・[等高線] を開きます。
入力データ=ground_dem2
等高線の間隔=10.00m
詳細パラメータで3Dベクタを生成にチェック
等高線は右の「…▼」をクリックし、ファイル名をセットします。
ここでは、
等高線(Contours)=contr10m.shp
としています。
「実行」します。
10mの等高線はできたと思います。

まだ閉じません。


等高線を出力した直後は、タブが「ログ」に切り替わっているので、
パラメータタブをクリックします。
また最初のダイヤログにもどりました。
ここで、今度は等高線の間隔と出力ファイル名を以下のように変更します。
等高線の間隔=1.00m
等高線(Contours)=contr1m.shp
「実行」し、今度は「閉じる」
等高線が出来ました。

●等高線のプロパティの編集

レイヤ窓、contr10mの上で右クリックしプロパティを表示します。
プロパティ窓の左のシンボロジを選びます。
色を赤に。
幅を0.36にします。


次に、プロパティ窓左のラベルを選びます。
最上部、「なし」を「単一定義」に切り替えます。
値をIDから、ELEVにします。
窓の下の方、配置を選びます。
モード=線に平行に配置
許容される位置を次の順番にチェックします
線上をチェック
線の方向に応じた位置にチェック
線の左のチェックを外します
以上で「OK」します。

レイヤ窓、contr1mの上で右クリックしプロパティを表示します。
プロパティ窓の左のシンボロジを選びます。
色を黒に。
幅を0.16にします。
以上で「OK」します。

●複数の等高線レイヤ間のダブリを削除

ただこの状態では、10mの等高線は、contr1mレイヤ内にもあり、ダブっています。

contr1mレイヤを選び、上の鉛筆マーク「編集モード」をクリックします。
次に、右上の方にある「属性テーブルを開く」アイコンをクリックします。
表が開きます。


ELEVをクリックするとELEVの値で昇順、降順に並び変わります。
これを並べ替えた状態で、例えば、値が90.00の行を選択し、上部のゴミ箱アイコンをクリックし行を削除します。
同様に100.00も削除。そうしたら表を閉じ、鉛筆アイコンをクリックし保存します。

これらの等高線はファイルメニューの中の「インポートとエクスポート」でCADデータにエクスポートすれば3DCADで扱うことができます。

尚、QGISのプロジェクトファイルは念のため時々保存しておきましょう。

●まとめ

・点群を読み込む

・TIN Meshの作成

・DEMの作成

・必要に応じDEMの修正

・等高線の生成

・等高線の編集

“QGIS3で点群から等高線をつくる(新版)” への 2 件のフィードバック

  1. […] QGISで点群を読み込んで、TINメッシュを作成、DEMデータを作成、それから等高線を描く記事はこれまでも2つ書いてきた。今回も等高線を描く記事なのだが、DEMデータから作成した等高線データのプロパティの少し高度な処理を行う。これまで紹介してきた方法では、主曲線(細い等高線)と計曲線(太い等高線)を別ファイルで行ってきたがこの記事では1ファイルで作成する。別ファイルのメリットはDXFにエクスポートしたときにCADデータは計曲線と主曲線が別レイヤになることで、この方が都合がよい場合もある。今回の方法ではCADの上では一つのレイヤに入ってしまうので分けたいのであれば、その1(QGIS3で点群から等高線をつくる)、その2(QGIS3で点群から等高線をつくる(新版))で等高線を作成するのがよいかと思われる。 […]

    いいね

コメントを残す