
【QGIS】野外調査で得たデータから地質図を作成してみよう
手書きで地質図の作成をするのって本当に、本当に面倒くさい!!
作業量が多いのはもちろん、一度ミスしたら全て消してやり直しになるのがとにかく嫌だ。現実世界にCtrl+ZやCtrl+C,Vが無いことを何度悔やんだことか。
↓(追記)↓ Pythonを組み合わせることで作業量を大幅に削減できました。
手書きよりも楽(??)な地質図の作成方法を早速記します。
*ほぼ趣味で書いているので、間違いがあるかもしれません。
*この記事を参考にすれば大まかな岩相分布図まで描けます。
GISを利用した地質図の作成法に関してほとんど情報が無かったので、ここで紹介する手順は自作です。もっと効率の良い方法があればぜひ教えてください。
大まかな手順
等高線の準備
標準地図のダウンロード
調査区域のDEMをダウンロードしてラスタ化
DEMから等高線を作成
等高線を標高で融合(dissolve)
融合した等高線(dissolved contour lines)を地物ごとにレイヤ化
岩相境界地点の入力
岩相境界地点に短いラインを作成し、露頭情報(走向傾斜など)を入力する。*CSVデータからも入力できると思う。
上記ラインを走向方向に回転させる。
上記ラインを地"層"等高線の間隔に合わせて平行に配列する。
2-1から2‐3の手順を隣接するルート上で繰り返す。
岩相境界線の作成
3-3で作成したラインと同じ地層標高を持つ隣接ルートのラインを探して、それらを新規のラインで結ぶ。
3-1のラインを地層等高線の間隔に合わせて平行に配列する。
3-2で作成したラインを地物ごとにレイヤ化
3-3のラインと、それと同じ標高を持つ等高線(1-4で作成)の交点を作成。
交点を結ぶと岩相境界線の完成。
これでも手順が多いですね…
まあ頑張りましょう。
なお、この記事では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 すなわち標高
融合ポリゴンの出力:ファイル保存先の指定


1-5 融合した等高線(dissolved contour lines)を地物ごとにレイヤ化
標高ごとの等高線は現在、dissolved等高線に含まれる地物でしかありません。ここで、等高線を地物からレイヤに昇格させて上げましょう。
プロセシングツール内の「属性でレイヤを分割」を選択
入力レイヤ:dissolved等高線(1-4で作成したもの)
ユニークID属性:ELEV
出力フォルダ:保存先の指定


こんな感じです。
全部表示すると重すぎるので、非表示にしときます。
手順2 岩相境界地点の入力
2-1 岩相境界地点に短いラインを作成し、露頭情報を入力する
この短いラインをここでは「露頭線」と呼びましょう。
新規シェープファイルレイヤ、新規geopackageレイヤのいずれかで線を作成します。
*シェープファイルとgeopackageの違いがよく分かりません。ここではシェープファイルで作成しています。
(追記)
geopackageにすると地物情報を一つのファイルにまとめられます。
フォルダ内を整理しやすいので私はgeopackage派です。

ファイル名:保存先の指定
ジオメトリ型:「ラインストリング」を選択
走向傾斜と露頭番号の属性を作成します。
名前:属性名(「走向」や「傾斜」)
型:整数を選択 (ただし、数字以外を入力したい場合はテキストを選択)
長さ:入力上限の文字数を指定(デフォルトの10でOK)
座標系,投影法:WGS84,とUTM (各調査範囲のUTMzoneによる)
(座標系、投影法に関して)
ここでは投影法をUTMに設定してください。後で計算するときに緯度経度ではなく、メートル単位で計算するためです。
(メートルで計算できれば他の投影法でもいいかも。他にもあるのかな?)
座標系は標準地図に合わせるためにWGS84にします。
上記を入力したら「属性リストに追加」をクリック

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

こんな感じです。
なお、走向は磁北基準で時計回りの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を導入すれば作業量をかなり減らせると思いますが、私はプログラミングがさっぱり分からないので今後の課題です。
もっと良い方法があれば教えてほしいです。