地図代数を用いた井戸のアクセス性の空間解析

Site: OpenCourseWare for GIS
Course: 水文地質学のためのGISトレーニング
Book: 地図代数を用いた井戸のアクセス性の空間解析
Printed by: Guest user
Date: Thursday, 21 November 2024, 1:52 PM

Description

このチュートリアルでは、地図代数を使って井戸のアクセス性を判断します。このチュートリアルは、Kurt Menke氏 (Bird's Eye View GIS)と共同で作成しました。

1. 概要

地図代数では、ラスターレイヤーを使った計算ができます。これは空間分析に役立ちます。例えば、様々な指標を評価して、適した場所、適していない場所を見つける必要がある場合、地図代数を使用することができます。

このレッスンの後、以下のことができるようになります。

  • ラスタ解析のために地図代数を使用する
  • ブール型(Boolean)離散型(discrete)連続型(continuous)のラスタを区別する
  • ブール型マップ、離散型マップ、連続型マップの凡例を作成する
  • Nodata の使用を理解する
  • 論理演算子の使用
  • ラスタからの距離を計算する
  • ラスタの再分類
  • ラスターポイントをベクタポイントに変換する
  • ラスターの値をベクタポイントでサンプリングする

このレッスンでは、次のようなケースを取り上げます。
(架空の)オアシスAïn Kju Dzjisの自治体は、以下の条件に基づいて、どの井戸がその住民にとって不適切かを分析するためにあなたを雇いました。

条件 1:
    井戸は住宅や道路から150m以内に設置する必要があります。

条件 2:
    井戸から300m以内に産業、鉱山、埋立地がないこと。

条件 3:
    井戸の深さは40メートル以下であること。

地図代数を使って必要な分析を行います。

このレッスンでは、このワークフローに沿って進めていきます。

Flowchart map algebra

このレッスンのラスターレイヤーは、レッスンのメインページからダウンロードできます。


2. 準備

このタスクでは、buildg.tif、roads.tif、dtm.tif、gwlevel.tifの各ラスターレイヤーが用意されています。

まず、これらのレイヤーのメタデータを調べます。そして、QGISのプロセッシングツールボックスの設定を行います。


2.1. メタデータをチェックする

1. ブラウザパネルでお気に入りを右クリックしてディレクトリを追加を選択します。
add to favorites


2. レイヤを保存したフォルダを選択します。Choose the folder where you have stored the layers.

お気に入りにフォルダを追加することで、プロジェクトファイルに素早くアクセスできるようになります。

3. + をクリックすると、フォルダの内容が展開されます。

4. これらのラスターレイヤーの地図やメタデータをプレビューするには、レイヤーを右クリックしてレイヤーのプロパティ...を選択します。

browser layer properties

レイヤーのプロパティウィンドウが開き、レイヤーのメタデータが表示されます。

layer properties

5. メタデータを確認し、理解しましょう。


2.2. プロセッシングツールボックスを使用する

QGISのプロセッシングツールボックスには、GISデータを処理するための多くのツールが用意されています。QGISのツール以外にも、GDAL、GRASS、SAGAなどのツールがあり、非常に便利です。

1.まず、メインメニューからプロセッシング|ツールボックスを選択して、プロセッシングツールボックスを起動します。 

processing toolbox menu

これで、プロセッシングツールボックスパネルが表示されます。


3. 条件 1: 家屋や道路から150メートル以内の井戸

入力レイヤーのメタデータを確認し、プロセッシングツールボックスを設定したところで、いよいよ3つの条件の分析を進めていきます。

  • 条件1:家や道路から150m以内に井戸があること
  • 条件2:井戸から300メートル以内に産業、鉱山、埋立地がないこと
  • 条件3:井戸の深さが40m以下であること

条件1では、まず家に注目し、次のようにします。

  • 建物のラスターレイヤーにスタイルを設定する
  • 家にはTrue、その他の建物にはFalseのBooleanレイヤーを作成する。
  • 家の周りに150メートルのゾーンを作る

続いて、道路についても同じ手順を繰り返します。


3.1. 離散型(discrete)のラスターレイヤーにスタイルを設定する

まずはを見てみましょう。家屋はbuildgレイヤーのクラスです。ラスターには通常、値しか格納されていないので、ラスターレイヤーには適切な凡例を割り当てる必要があります。

1. レイヤパネルでOpen layer styling panel buttonをクリックしレイヤスタイルパネルを開きます。

2. レンダリングタイプをカテゴリ値パレットに選択します。カラーランプランダムのままにし、分類をクリックします。

3. 以下のスクリーンショットを参考に、各ラベル名をダブルクリックしてクラス番号にラベルを追加してください。色をダブルクリックし、例のようにすると、より直感的にわかりやすくなります。

buildg styling

buildgは離散型(discrete)なラスターであるため、カテゴリ値パレットのレンダリングタイプを使用しました。このレンダラーは、ラスターレイヤーにあるユニークな整数値をそれぞれ分類します。


3.2. 家をTrue、その他の建物をFalseとするブール型(Boolean)レイヤーの作成

家はTrue(1)、その他のクラスはFalse(0)というブール型のレイヤーをbuildgレイヤーで作成したい場合は、ラスタ計算機を使用します。

1. メインメニューでラスタ | ラスタ計算機と進みます。

2. ラスタ計算機ダイアログで、 buildg@1をダブルクリックし、=ボタンをクリックし、1を入力します。

この式は、「buildg@1 = 1」となり、「buildg@1レイヤが1(家のクラス)であれば、出力レイヤはTrue(値1)、そうでなければFalse(値0)である」という意味になります。ここでは、シングルバンドのラスターレイヤーのみを使用しています(マルチバンドは、リモートセンシングなど他のアプリケーションで使用されます)。

house raster calculator

3. 出力レイヤはhouses.tifとします。OKをクリックし処理を実行します。

グッドプラクティスに従って、このブール型レイヤーにスタイルを設定します。ブール型レイヤーには、またカテゴリ値パレットのレンダラーを使用します。

4.  レッスン4.1のステップ1と2を繰り返して、housesレイヤーにスタイルを設定し、TrueとFalseに直感的な色を選択します。


3.3. 家の周りに150メートルのゾーンを作る

これで家だけのレイヤーができたので、家の周囲150mのゾーンの計算を行っていきます。ここでは、家の周囲150mのゾーン内ではTrue(1)、家から150m以上離れた場所ではFalse(0)となるブール型レイヤーを作成します。

1. メインメニューでラスタ | 解析 | 特定値までの距離(proximity)を選択します。

proximity menu

2. 特定値までの距離(proximity)ダイアログで、入力レイヤとしてhousesレイヤが選択されていることを確認します。距離の単位地理座標に設定します。最大距離(これ以上の距離はnodataになる)に150mと入力し、最大距離以内のピクセルに(距離ではなく)固定値を付与するに1と入力します。出力のデータ型Byteにし(0と1しか使わないからです)、出力ファイルをhouses150m.tifとします。その他の設定はデフォルトのままにしておきます。

proximity dialog

3. 実行をクリックし、計算が終わったら閉じるをクリックします。

4. ブール型地図をスタイリングします。Trueのピクセルを緑に、Falseのピクセルを赤にします。

house zone styled


3.4. 道路の周囲に150メートルのゾーンを作る

同様にして、道路周辺の150mのバッファを計算します。

1. roadsレイヤのスタイリングをします。以下のクラスを使用します。

0: no roads
1: dirt road
2: tarmac

2. 家の周囲150mのゾーンを計算する手順を繰り返しますが、入力レイヤーとしてroadsレイヤーを使用し、出力の名前を roads150m.tif とします。

3. ブール型地図をスタイリングします。Trueのピクセルを緑に、Falseのピクセルを赤にします。


4. 条件 2: 井戸から300メートル以内に産業、鉱山、埋立地がないこと

2つ目の条件では、まずbuildgレイヤーを再分類して、産業、鉱山、埋立地をTrue(1)、その他のクラスをFalse(0)とするブール型地図にする必要があります。次に、Trueピクセルまでの距離を計算し、最終的に工業、鉱山、埋立地から300m以上離れたピクセルを計算する必要があります。

4.1. 工業、鉱山、埋立地をTrue、その他の建物をFalseとしたBool型ラスタを作成する

1. プロセッシングツールボックスラスタ解析 | 区分表(テーブル)で再分類を選択します。

reclassify by table menu

区分表(テーブル)で再分類ダイアログが表示されます。ルックアップテーブルを使用して、buildgラスタを再分類していきます。

2. 下の図のようにダイアログに入力します。

reclassify by table

ここでは、ルックアップテーブルから除外された値について、出力レイヤーのnodata値を指定できます。分類区分の境界上の扱いは、値がルックアップテーブルの行の範囲に含まれるか除外されるかを定義します。ここでは、範囲は使用せず、各値を再分類します。したがって、min <= value <= maxを選択します。出力のデータ型には、出力値が整数であることから、Int16を使用しています。

3. 次にルックアップテーブルの設定です。 Browse buttonをクリックします。

4. 下の図のようにルックアップテーブルを入力します。
lookup table

5. OKをクリックし実行します。処理が終わったらダイアログを閉じます。

6. 結果を確認します。鉱山、工業、埋立地は1、その他のクラスは0です。識別ツールidentify tool buttonを使用して、マップをクリックします。右下のパネルに、識別結果が表示されます。これは、レイヤーパネルで選択されたレイヤーのピクセルの値を表示します。ピクセル値を見るためには、列のサイズを変更する必要があるかもしれません。

見た通りに、industryはブール値のレイヤーなので、先ほどと同じようにカテゴリ値パレットレンダラーでスタイルを設定する必要があります。

7. industryレイヤをスタイリングします。


4.2. 産業、鉱山、埋立地の周囲300メートルのゾーンを作成する

工業、鉱山、埋立地の時にTrueの値を持つブール型地図で、これらのピクセルまでの距離を計算できます。特定地までの距離(proximity)ツールでは、しきい値よりも大きいピクセルに値を割り当てることができないため、すべての距離を計算してから、ラスタ計算機を使用して、産業、鉱山、埋立地から300メートル以上離れたピクセルのブール型地図をTrueで計算する必要があります。

1. 特定地までの距離(proximity)ツールを開きます。

2. industry入力レイヤになっていることを確認します。その他の設定はデフォルトのままにし、出力ファイルinddist.tifとします。

proximity industry dialog


3. 結果を確認します。

inddistレイヤーは、距離を表す実数値を持つ連続したラスタです。

4. レンダリングタイプとして単バンド擬似カラーを使用して、このラスタタイプに適した凡例を作成します。直感的な色を使用します(例:赤から緑へのランプ)。

5. ラスタ計算機でinddist@1 >= 300を計算します。出力レイヤをind300m.tifとします。

これもまた、ブール型のレイヤーになります。


6.  ind300m レイヤをスタイリングします。

ind300m result


5. 条件 3:深さ40メートル未満の井戸

最後の条件は深さが40m未満の井戸を識別する必要があることです。

gwlevelレイヤーは、井戸内の地下水位の絶対的な標高を海抜メートルで示しています。地下水の深さを計算するためには、デジタル地形モデル(DTM)で示された地表の標高から、この標高を差し引く必要があります。

1. ラスタ計算機を開きます。

2. 次の計算式dtm@1 - gwlevel@1により、DTMから絶対的な井戸の深さを差し引きます。出力レイヤをwelldepth.tifとします。

3. このラスタタイプに最適なレンダラーを使ってwelldepthレイヤのスタイリングをします。

4. 次に、ラスタ計算機で深さ40m未満のブール型地図を計算します。出力レイヤはnotdeep.tifとします。

5. notdeep レイヤをスタイリングします。

notdeep result


6. 3つの条件を組み合わせる

3つの条件のブール型地図を計算した後に、それらを組み合わせて最終的な結果を導き出す必要があります。

1. ラスタ計算機を使用して3つの条件を組み合わせます。全てのBool型の結果はTrueである必要があるので、AND演算子を使用しなければなりません。出力レイヤはaccessiblewells.tifとします。

calculate accessible wells

2. 結果となるラスタレイヤを確認し、スタイリングします。


7. 結果を報告する

さて、アクセス可能な井戸とアクセス不可能な井戸を特定したところで、施工業者に報告するための結果が載った地図を作成する必要があります。

次のステップで、次のことを行なっていきます。

  • 井戸のラスタのセルをポイントのベクタデータに変換して、より見やすく表示する
  • ラスター値をサンプリングして、計算されたレイヤーの属性を追加する
  • 解析結果のスタイリング


7.1. ラスターセルをポイントのベクタデータに変換

最終的な結果を示すために、accessiblewellsレイヤーにスタイルを設定することができます。しかし、井戸を地図上のポイントの地物として表示する方がよりふさわしいでしょう。そこで、井戸のピクセルをポイントのベクタデータに変換する必要があります。

1. プロセッシングツールボックスベクタ作成 | ラスタのベクタ化(pixels to points)を選択します。

raster pixels to points

2. ダイアログで、accessiblewellsレイヤを入力ラスタレイヤとして選択します。属性名にAccessibilityと入力します。ラスタの値は属性テーブルのこのフィールドに保存されます。出力する点ベクタレイヤとしてwells.shpとしましょう。

raster pixels to points dialog

3. 実行をクリックし、処理が終わったら閉じます。


7.2. ラスタ値のサンプリング

点ベクタレイヤのwellsには、Accessibilityというフィールドのみが含まれています。しかし、属性テーブルに他のデータを含めることは、より実用的になります。Point sampling tool pluginを使って、このプロジェクトのラスタレイヤーをサンプリングし、その情報をポイントの属性テーブルに追加することができます。

1. Point sampling tool プラグインをインストールします。

2.レイヤパネルで、サンプリングしたいレイヤーの前のボックスのみをチェックし、他はチェックを外します。dtm, welldepth, gwdepth, notdeep, ind300m, roads150m, houses150mのレイヤーを選択します。
3. Point sampling tool ボタン point sampling tool buttonをクリックします。

4. Point Sampling Tool ダイアログのGeneralタブでlayer containing sampling pointsとしてwells.shpを選択し、Layers with fields/bands to get values from で全てを選択します。Output point vector layer を wells_final.shpとして保存します。

point sampling tool general

5. Fields タブをクリックします。

6. 必要に応じて、出力フィールドに付与される属性名を編集します。

point sampling tool fields

7. OKをクリックし閉じます。

8. wells_finalの属性テーブルを開き、結果を確認します。
wells final attribute table


7.3. 解析結果のスタイリング

ここで、レイヤーのスタイル設定を行います。

結果を表示する最初のステップは、井戸にアクセスできるかどうかでwells_finalデータのスタイルを決めることです。

1. レイヤパネルでOpen layer styling panel buttonをクリックしてレイヤスタイルパネルを開きます。wells_finalを対象レイヤに設定します。

2. 単一定義(single)からカテゴリ値による定義(categorized)に変更します。値(value)Accessibleに変更し、分類をクリックします。

3. このレンダラーを使用する場合、QGISはNULL値をキャプチャするカテゴリを作成します。ここでは、Accessible列にNULL値を持つ井戸はありません。その他の値になっているエントリを選択し、削除minus buttonボタンをクリックして削除します。値が1の井戸には、4mmの大きさの緑のシンボルを付け、値が0の井戸には、大きさが2mmの赤色を付けます。

4. 凡例のカラム名をが1のものをAccessibleに、がゼロのものをInaccessibleに変更します。

styling wells

5. レイヤスタイルパネルを下にスクロールしていくとレイヤレンダリングセクションがあります。拡げて描画エフェクトを選択します。効果をカスタマイズcustomize effects iconアイコンがアクティブになります。そのアイコンをクリックし効果のプロパティパネルを開きます。ここでは、インナーグロー、アウターグロー、ドロップシャドウとその他の効果を追加できます。ドロップシャドウにチェックを入れます。ドロップシャドウ効果を選択するとその設定項目が現れます。オフセットの距離を1mmに小さくしましょう。go back buttonボタンを押してメインのスタイルパネルに戻ります。

styling dock labels

6. レイヤスタイルパネルのラベルタブlabeling settingsに切り替えます。

7. なし単一定義(single)に変更します。値(value)welldepthに設定します。

ここでは、「ハードコピーマップからのデータ作成(Preparing Data from Hardcopy Maps)」のセクションの最後にピークのラベル付けを行ったときとよく似たラベル付け式を使用します。ラベルがWell Depth: 76.4 mのように表示されるように式を設定していきます。

8.  expression buttonボタンをクリックし式ダイアログウィンドウを開きます。 

9.まず、井戸の深さの値の前に文字列「Well Depth」を追加するには、既存の式の前に’Well Depth: ’を追加します。

10. 2つ目のコンポーネントを実現するには、format_number関数を使用します。検索ボックスを使ってformat_number関数を見つけます。これをwelldepthフィールドの直前に挿入します。この関数は数値と小数点以下の桁数を必要となります。数値はwelldepthフィールド、小数点以下の桁数は2となります。

11. 文字列連結 String concatenation演算子と and the the 新しい線 new line operator演算子を使うといい感じにラベルをフォーマットして単位を最後に追加できます。

12. 式は以下のようになるでしょう。'Well Depth:'|| '\n' || format_number(welldepth,2) || ' m'

13. フォント を sans serif フォントにし、大きさを9ポイントにします。

14. 配置 label placement tab iconタブに切り替え、モード点からのオフセットに設定します。 配置する象限を右下に設定し、オフセット量(X, Y)を1.5mmに設定します。

well label placement

15. 最後に自動配置設定 Automated placement settings ボタンをクリックし配置エンジンの設定ウィンドウを開きます。地図の端のラベルは省略のチェックを外します。これはラベルが切れてしまうことを防ぎます。

16. スタイリングを完成させるために、dtmレイヤを設定していきます。レイヤスタイルパネルで、このレイヤをターゲットレイヤにします。カラーランプのドロップダウンをクリックし、カラーランプを新規作成を選択します。

17. カラーランプのタイプウィンドウが開きます。カタログ:cpt-city をタイプとして選択します。OKをクリックします。

18. Cpt-city カラーランプ ウィンドウが開きます。 Topography カテゴリを選択します。

19. sd-a を選択しOKをクリックします。

このカラーランプをスタイルライブラリに保存できることをご存知でしたか?これを行うには、カラーランプのコンテキストメニューにアクセスし、カラーランプを保存を選択します。新しいカラーランプを保存ウィンドウが開き、名前とタグを付けることができます。

20. レイヤレンダリングセクションまでスクロールし、混合モード通常(Normal)に戻します。

21. 最後にdtmレイヤを右クリックし、コンテキストメニューからレイヤを複製を選択します。

22. dtm コピー レイヤを above the dtm レイヤの上にドラッグして重なるようにします。

23. レイヤスタイルパネルで、この複製したdtmレイヤーをターゲットレイヤーにします。レンダラーを陰影図(hillshade)に変更します。レイヤレンダリングセクションまでスクロールダウンし、混合モード乗算(Multiply)に戻します。

wells final



8. 結論

このレッスンでは、以下のことを学びました。

  • ラスタ解析のための地図代数の適用
  • ブール型(Boolean)離散型(discrete)、および連続型(continuous)のラスタを区別する
  • ブール型マップ、離散型マップ、連続型マップの凡例を作成する
  • Nodata の使用を理解する
  • 論理演算子の使用
  • ラスタからの距離を計算する
  • ラスタの再分類
  • ラスターポイントを点ベクタに変換する
  • 点ベクタでラスタの値をサンプリングする

詳しい手順については、こちらのウェビナーをご覧ください。