17.10. ラスター計算機。無データ値

注釈

このレッスンでは、ラスターレイヤーの上にいくつかの操作を実行するために、ラスター計算機を使用する方法について説明します。また、無データ値とは何か、それを計算機や他のアルゴリズムがどのように計算し処理するか、説明します。

ラスター計算機は、あなたが見つける最も強力なアルゴリズムの一つです。それは多くの異なる計算に使用できる非常に柔軟で汎用性の高いアルゴリズムで、すぐにあなたのツールボックスの重要な一部となるであろうものです。

このレッスンでは、それらのほとんどはかなり単純、ラスター計算機で、いくつかの計算を実行します。これは、私たちはそれを使用する方法を見て、それはそれを見つけるかもしれないいくつかの特別な状況を扱う方法をできるようになります。それを理解することは、一般的にそれに適用される特定の技術を理解するためにも、計算機を使用して、いつ後で期待される結果を取得することが重要です。

このレッスンに対応する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 レイヤーについて行います。このレイヤーは、積算流量、水文学的パラメーターの値が含まれています。それの外部データ値 - それがないと、のみ所与流域の領域内でこれらの値を含んでいます。おわかりのように、レンダリングは、値が分散されている方法に起因する非常に有益ではありません。その流れの蓄積の対数を使用すると、はるかに有益な表現が得られます。ラスター計算機を使用してそれを計算できます。

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

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

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

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

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

次の演習のためには1つではなく2つのレイヤーを使用しようとしていて、第二のレイヤーで定義された流域内だけで有効な標高値を持つDEMを得ようとしています。計算機ダイアログを開き、入力レイヤーフィールドにプロジェクトの両方のレイヤーを選択します。対応するフィールドに次の式を入力します:

a/a * b

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

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

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

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

実行してきたこのアルゴリズムについては、無データ値とそれらがどのように処理されるかを別にしても、他に興味深いものがあります。私たちが掛け算しているレイヤーの範囲を見る場合(それは目次のレイヤーの自分の名前をダブルクリックしてそのプロパティを見ることで行うことができます)、同じでないことがわかります、流れ蓄積レイヤーによって覆われる範囲は完全DEMの範囲より小さいので。

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

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

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

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

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

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

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

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

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

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

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

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