重要

翻訳は あなたが参加できる コミュニティの取り組みです。このページは現在 97.14% 翻訳されています。

17.10. ラスタ計算機。No-data値

注釈

このレッスンでは、ラスタ計算機を使ってラスタレイヤに対していくつかの操作を行う方法を紹介します。また、no--data値とは何か、計算機や他のアルゴリズムがどのようにそれを扱うかについても説明します。

ラスタ計算機は最も強力なアルゴリズムの一つです。様々な計算に使える非常に柔軟で汎用性の高いアルゴリズムであり、すぐにあなたのツールボックスの重要な一部になることでしょう。

このレッスンでは、ラスタ計算機を使っていくつか計算を行います。そのほとんどは簡単な計算です。ここでは、ラスタ計算機の使い方や、特殊な状況に対応する方法を学びます。これを理解することは、後で計算機を使うときに期待通りの結果を得るために重要であり、また計算機を使って一般的に適用される特定のテクニックを理解するために重要です。

このレッスンに対応するQGISプロジェクトを開きます。それには複数のラスタレイヤが含まれていることが分かります。

次にツールボックスを開き、ラスタ計算機に対応するダイアログを開きます。

../../../_images/calculator_dialog.png

注釈

インターフェイスは、最近のバージョンで異なります。

2つのパラメータがダイアログに含まれています。

  • 分析に使用するレイヤ。これは複数入力であり、望むだけ多くのレイヤを選択することができます。右側のボタンをクリックし、表示されるダイアログで使用したいレイヤを選択します。

  • 適用する式。式は、上記パラメータで選択され、変数名としてアルファベット文字 (a, b, c...) または g1, g2, g3... で命名されたレイヤを使用します。すなわち、式 a + 2 * bg1 + 2 * g2 と同じであり、第一レイヤの値と第二レイヤの値の2倍の合計を計算します。レイヤの順序付けは選択ダイアログに表示されるのと同じ順序です。

警告

計算機では、大文字と小文字が区別されます。

手始めに、メートルからフィートにDEMの単位を変更します。必要な計算式は次のものです。

h' = h * 3.28084

レイヤフィールド内でDEMを選択し、式フィールドに a * 3.28084 とタイプします。

警告

英語以外のユーザーの場合:常に「,」ではなく「.」を使用してください。

実行 をクリックしてアルゴリズムを実行してください。入力レイヤの同じ外観ですが、異なった値を持つレイヤが得られます。使用した入力レイヤは、その全てのセルに有効な値を持っているので、最後のパラメータはまったく効果がありません。

今度は、accflow レイヤを使って、別の計算をしてみましょう。このレイヤは、水文学的なパラメータである累積流量の値を含んでいます。流域の範囲内にのみその値があり、その外は no--data 値です。見ての通り、値が分散しているため、レンダリングはあまり有益ではありません。流量の蓄積の対数を使用すると、より情報量の多い表現になります。ラスタ計算機を使ってそれを計算することができます。

再びアルゴリズムダイアログを開き、入力レイヤとして accflow レイヤだけを選択し、次の式を入力します: log(a)

これが得られるレイヤです。

../../../_images/log.png

与えられた点でのレイヤの値を知るために 識別 ツールを選択し、たった今作成したレイヤを選択し、流域の外でポイントをクリックすると、no--data 値が含まれていることがわかるでしょう。

../../../_images/identify.png

次の練習では、1つのレイヤの代わりに2つのレイヤを使用し、2番目のレイヤで定義された盆地内のみ有効な標高値を持つDEMを取得するつもりです。計算機ダイアログを開き、入力レイヤフィールドでプロジェクトの両方のレイヤを選択します。対応するフィールドに次の数式を入力します:

a/a * b

a は、積算流量のレイヤを指し(リストに表示される最初のものであるため)、 b はDEMを指します。外部データ値 - ここで式の最初の部分でしていることはそれ自体で積算流量レイヤを割ることです。この結果は流域内で値1、外でデータなし値です。それからDEMを掛け、流域内でそれらのセルの標高値 ( DEM * 1 = DEM )、外でデータなし値( DEM * no_data = no_data )を得ます

結果のレイヤはこれです。

../../../_images/masked.png

この技術は、ラスタレイヤ内で値を マスク するために頻繁に使用され、ラスタレイヤによって使用される任意の矩形領域でない領域のための計算を実行したいときはいつでも有用です。例えば、ラスタレイヤの標高ヒストグラムはあまり意味を持ちません。代わりそれが流域に対応する値のみを使用して(上記の場合のように)計算される場合、得られる結果は実際に流域の構成についての情報を与える有意味なものです。

There are other interesting things about this algorithm that we have just run, apart from the no--data values and how they are handled. If you have a look at the extents of the layers that we have multiplied (you can do it double-clicking on the names of the layer in the table of contents and looking at their properties), you will see that they are not the same, since the extent covered by the flow accumulation layer is smaller that the extent of the full DEM.

それが意味するのは、これらのレイヤが一致しないこと、1つまたは両方のレイヤをリサンプリングすることでそれらのサイズと範囲を同じに揃えなければ直接掛け算はできないことです。しかし、私たちは何もしませんでした。QGISではこのような状況の面倒を見てくれて、必要なときに自動的に入力レイヤをリサンプリングします。出力範囲は、入力レイヤから計算された最小の被覆範囲、およびそれらセルサイズの最小セルサイズです。

この場合(そしてほとんどの場合)、これは所望の結果を生成しますが、どんな操作が追加で行われているかには常に注意しておく必要があります。なぜならそれらは結果に影響を与える可能性があるからです。この動作が希望されない場合がある場合には、手動のリサンプリングが事前に適用されるべきです。後の章では、複数のラスタレイヤを使用したときのアルゴリズムの動作について詳細に見るでしょう。

このレッスンを別のマスク作成の練習で終えましょう。私たちは標高が1000メートルと1500メートルの間のすべての地域で傾きを計算しようとしています。

この場合は、マスクとして使用するレイヤはありませんが、計算機を使用して作成できます。

唯一の入力レイヤとしてDEMを、そして次式を使用して計算を実行します

ifelse(abs(a-1250) < 250, 1, 0/0)

おわかりのように、簡単な代数演算を行うためだけでなく、計算機を使用でき、また上記のような条件文を含むより複雑な計算を実行します。

結果は、私たちが作業をしたい範囲内で値1、およびそれ以外のセルでデータなしを持っています。

../../../_images/elevation_mask.png

データなし値は0/0の式から来ています。それは未定の値であるので、SAGAは、実際にはデータ値として扱うNaN(非数)の値を、追加します。この小さなトリックを使えば、セルのデータなし値が何か知らなくても、データなし値を設定できます。

今、プロジェクトに含まれる傾斜レイヤを掛ける必要があるだけで、希望の結果が得られるでしょう。

すべてのことは、計算機で、単一の操作で行うことができます。これは読者の練習として残しておきます。