見出し画像

【QGIS】野外調査で得たデータから地質図を"半"自動で作成してみよう

手書きで地質図の作成をするのって本当に、本当に面倒くさい!!
作業量が多いのはもちろん、一度ミスしたら全て消してやり直しになるのがとにかく嫌だ。現実世界にCtrl+ZやCtrl+C,Vが無いことを何度悔やんだことか。

愚痴を並べると止まりそうにないので、手書きよりも楽(??)な地質図の作成方法を早速記します。

*ほぼ趣味で書いているので、間違いがあるかもしれません。
*この記事を参考にすれば大まかな岩相分布図まで描けます。

GISを利用した地質図の作成法に関してほとんど情報が無かったので、ここで紹介する手順は自作です。もっと効率の良い方法があればぜひ教えてください。


大まかな手順

  1. 等高線の準備

    1. 標準地図のダウンロード

    2. 調査区域のDEMをダウンロードしてラスタ化

    3. DEMから等高線を作成

    4. 等高線を標高で融合(dissolve)

    5. 融合した等高線(dissolved contour lines)を地物ごとにレイヤ化

  2. 岩相境界地点の入力

    1. 岩相境界地点に短いラインを作成し、露頭情報(走向傾斜など)を入力する。*CSVデータからも入力できると思う。

    2. 上記ラインを走向方向に回転させる。

    3. 上記ラインを地"層"等高線の間隔に合わせて平行に配列する。

    4. 2-1から2‐3の手順を隣接するルート上で繰り返す。

  3. 岩相境界線の作成

    1. 3-3で作成したラインと同じ地層標高を持つ隣接ルートのラインを探して、それらを新規のラインで結ぶ。

    2. 3-1のラインを地層等高線の間隔に合わせて平行に配列する。

    3. 3-2で作成したラインを地物ごとにレイヤ化

    4. 3-3のラインと、それと同じ標高を持つ等高線(1-4で作成)の交点を作成。

    5. 交点を結ぶと岩相境界線の完成。

これでも手順が多いですね…
まあ頑張りましょう。

なお、この記事では1-1と1-2についての説明は省略します。これらについては以下のサイトが詳しいです。

https://nlftp.mlit.go.jp/ksj/other/QGIS_manual.pdf

↑ QGISのダウンロードから標準地図の導入について

↑ DEMについて

手順1 等高線の準備

ラスタ化したDEMのレイヤを作成し終えた手順1-3から解説します。

なお、ファイル名が番号のみのDEMを使用することを推奨します。merge○○みたいなファイルでは、隣接するDEMとズレが生じるためです。

1-3 DEMから等高線を作成

プロセシングツールボックス内にある「等高線」を選択して、以下のように入力します。

入力レイヤ:ラスタ化したDEMレイヤ
等高線間隔:今回は10m間隔
ファイルの保存先:保存先とファイル名を指定(一時フォルダでは保存されません)

それ以外はそのまま。

こんな感じ。

1-4 等高線を標高で融合(dissolve)

さきほど作成した等高線は、同じ標高の等高線でも離れていれば別の地物として認識されます。そこで、等高線を標高(ELEV)ごとにまとめて、標高ごとの地物を作ります。

プロセシングツール内の「融合(dissolve)」を選択

入力レイヤ:1-3で作成した等高線
基準となる属性:ELEV すなわち標高
融合ポリゴンの出力:ファイル保存先の指定

dissolved等高線の完成。見た目は等高線と変わりません

1-5 融合した等高線(dissolved contour lines)を地物ごとにレイヤ化

標高ごとの等高線は現在、dissolved等高線に含まれる地物でしかありません。ここで、等高線を地物からレイヤに昇格させて上げましょう。

プロセシングツール内の「属性でレイヤを分割」を選択

入力レイヤ:dissolved等高線(1-4で作成したもの)
ユニークID属性:ELEV
出力フォルダ:保存先の指定

干渉色みたいだ

こんな感じです。
全部表示すると重すぎるので、非表示にしときます。

手順2 岩相境界地点の入力

2-1 岩相境界地点に短いラインを作成し、露頭情報を入力する

この短いラインをここでは「露頭線」と呼びましょう。

新規シェープファイルレイヤ、新規geopackageレイヤのいずれかで線を作成します。

*シェープファイルとgeopackageの違いがよく分かりません。ここではシェープファイルで作成しています。

(追記)
geopackageにすると地物情報を一つのファイルにまとめられます。
フォルダ内を整理しやすいので私はgeopackage派です。

左上のほうにある

ファイル名:保存先の指定
ジオメトリ型:「ラインストリング」を選択

走向傾斜と露頭番号の属性を作成します。

名前:属性名(「走向」や「傾斜」)
型:整数を選択 (ただし、数字以外を入力したい場合はテキストを選択)
長さ:入力上限の文字数を指定(デフォルトの10でOK)
座標系,投影法:EPSG6691など

(座標系、投影法に関して)
ここでは投影法をUTMに設定してください。後で計算するときに緯度経度ではなく、メートル単位で計算するためです。
(メートルで計算できれば他の投影法でもいいかも。他にもあるのかな?)
座標系はJGD2000やJGD2011など。

上記を入力したら「属性リストに追加」をクリック


レイヤを作ったら左上の黄色い鉛筆マークをクリックしたあとに、「線の地物を追加」を押して露頭線を作成しましょう。
露頭線の向きは適当で構いません。

*傾斜は北傾斜を正としています。

こんな感じです。
なお、走向は磁北基準で時計回りの360°表記にしてください。

このようにして、隣接する踏査ルート上の露頭線を作成してください。

2-2 露頭線を走向方向に回転させる

ここでは、露頭線を走向の方角に回転させます。

プロセシングツール内の「ジオメトリを回転」を選択。

入力レイヤ:露頭線
回転する角度:”走向”-degrees( azimuth( make_point($x_at(0),$y_at(0)),make_point($x_at(-1),$y_at(-1))))

(回転角度の関数について)
ここでは、式文字列ビルダを用いて回転する角度を設定します。

「編集」をクリックすると式文字列ビルダに移れます

仕組みはかなりめんどくさいので、気になる方は以下のページを読んでみてください。(後日執筆予定)

*azimuth関数とmake_point関数を組み合わせたものです。もっと楽な方法があるのかもしれませんが、私はこれしか思いつきませんでした。

一応、以下の関数を文字列ビルダにコピペしたら使えます。ただし、”走向”はご自身で設定した走向の属性名を入力してください。

 "走向" -degrees( azimuth( make_point($x_at(0),$y_at(0)),make_point($x_at(-1),$y_at(-1))))
「走向」は「フィールドと値」から選択。
Excelのセル計算と同じように入力できます。
回転したらこんな感じ。
隣の沢と同じような走向であることが分かりますね。

2-3 地"層"等高線の間隔に合わせて平行に配列

地質図を作成したことのある方ならご存知だと思いますが、地形の等高線とは別に、地層の等高線を作成します。*arctanで求めるやつ。

ここでは地層等高線の間隔を求めて、回転した露頭線をその間隔でいくつか配列します。

プロセシングツール内の「平行移動した地物の配列」を選択。

入力レイヤ:回転済みの露頭線
コピーの数:お好み。線を何個配列するか決められる。
ステップ距離(XとY):(sin(radians(45)))*10/(tan(radians(abs( "傾斜" ))))

(ステップ距離に関して)
コピペしたらそのまま使えます↓

(sin(radians(45)))*10/(tan(radians(abs( "傾斜" ))))

等高線の間隔をx,y方向に分解した各成分だけ、露頭線を移動させます。
ステップ距離とは、x,y方向の変位です。

正の方向だけでなく、負の方向(上記式に-1だけ掛け算する)にも配列するために、「平行移動した地物の配列」を二回行います。

こんな感じになる

手順3 岩相境界線の作成

3-1 同じ標高の地層等高線どうしを結ぶ

新規でラインのレイヤを作成し、同じ標高の地層等高線を結びます。
なお、作成するラインは一本だけで構いません。ここでは、作成するラインを「岩相境界 基礎線」と呼ぶことにします。

先程と同様に、新規シェープファイルでラインを作成しました。

紫の線が岩相境界基礎線

3-2 岩相境界基礎線を平行に配列

露頭線のときと同様に、岩相境界基礎線を平行に配列します。
このとき、各露頭地点で傾斜が異なるので傾斜を調整する必要があります。ここでは各露頭の傾斜の平均値をこの境界での傾斜とします

(sin(radians(45)))*10/(tan(radians(abs( "傾斜の平均値" ))))

↑X,Y方向のステップ距離
傾斜の平均値を求めて入力してください。

また、負の方向への移動もお忘れなく。

こんな感じです。

ここで、正方向と負方向の「平行配列済み岩相境界基礎線」をひとつのレイヤにまとめます。

プロセシングツール内の「和集合」を選択

入力レイヤ:正(負)方向に配列した岩相境界基礎線
オーバレイレイヤ:負(正)方向に配列した岩相境界基礎線

こんな感じに入力。
緑色の「和集合 岩相境界基礎線 平行配列済み」が出来上がりました。

3-3 ラインのレイヤ化

「属性でレイヤを分割」を使用して、地層等高線を標高ごとに分割してレイヤ化します。
1-5と同様の操作です。

3-4 3-3のラインと、それと同じ標高を持つ等高線(1-4で作成)の交点を作成

等高線と地等高線の交点を作成します。

プロセシングツール内の「線の交差」を選択

ここでは、複数レイヤを一回で処理するために、バッチプロセスを使用します。

入力レイヤ:ある標高の等高線(1-5で作成したもの)
交差レイヤ:同じ標高の線(3-3で作成したライン)
交差部分:交点レイヤの保存先指定

こんな感じになります(岩相境界基礎線は非表示)

3-5 交点を結んで岩相境界線を作成

ここまで来たら後は手動で交点を繋いで線を引きましょう。
3-4で作成した交点を全て結んで一つのラインにすれば、岩相境界線の完成です!

おわり

ここで紹介した方法によりアナログ作業からは抜け出せますが、作業量は多いままです。ある程度QGISに慣れてしまえばこちらのやり方が早いかもしれませんが、大幅な時間短縮は望めないような気もします。

Pythonを導入すれば作業量をかなり減らせると思いますが、私はプログラミングがさっぱり分からないので今後の課題です。

もっと良い方法があれば教えてほしいです。

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