Hansen らの世界的な森林の変化データの概要

Earth Engine の Hansen et al.(2013 年) 世界的な森林の変化データセットは、2000 年から 2014 年までの世界的な森林の変化を 30 メートルの解像度で表しています。まず、Hansen らのデータを地図に追加します。「Hansen forest」を検索してインポートに gfc2014 という名前を付けることで、世界的な森林の変化データをインポートする(データセットの検索とインポートの詳細)か、次のコードをコードエディタにコピーします。

コードエディタ(JavaScript)

var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015');
Map.addLayer(gfc2014);

コードエディタの上部にある [Run] ボタンをクリックすると、図 1 のような画面が表示されます。

森林の変化(デフォルト)
図 1. Hansen et al.(2013 年)の森林変化データのデフォルトの可視化。

この後すぐに、見栄えを良くするので、心配しないでください。(Earth Engine のデフォルトの画像可視化の詳細)。このセクションの最後には、図 2 のような画像が完成します。緑色は 2000 年に森林が検出された場所、赤色は調査期間中に推定された森林の減少、青色は同期間中の森林の増加、マゼンタは森林の減少と増加の両方があった場所を表し、森林以外の場所はマスクされています。

森林の変化(カスタム)
図 2. Hansen et al.(2013 年)の森林変化データのカスタム ビジュアリゼーション。

マルチバンド画像を地図に追加すると、画像の最初の 3 つのバンドがそれぞれ赤、緑、青として選択され、各バンドのデータ型に応じて引き伸ばされます。画像が赤く見えるのは、最初の 3 つのバンドが treecover2000、loss、gain であるためです。treecover2000 バンドはパーセントで表され、バイナリ({0, 1})である loss(緑)と gain(青)よりもはるかに高い値になります。そのため、画像は圧倒的に赤く表示されます。

Global Forest Change データのバンドは次のとおりです。

周波数帯の名前説明範囲
treecover2000ピクセル内の樹木エリアの割合。0 - 100
損失 調査期間中に損失が発生した場合は 1。 0 または 1
ゲイン調査期間中に増加が発生した場合は 1。 0 または 1
lossyear森林減少が発生した年。2001 年から 1 から始まるインデックス。森林減少が発生しなかった場合は 0。0 ~ 12
first_b302000 年の最初の有効なピクセルから構築された Landsat 7 赤バンド(2000 年に有効なピクセルがない場合はそれ以前)。0~255
first_b402000 年の最初の有効なピクセルから構築された Landsat 7 近赤外線バンド。0~255
first_b502000 年の最初の有効なピクセルから構築された最初の Landsat 7 短波赤外線バンド。0~255
first_b702000 年の最初の有効なピクセルから構築された 2 番目の Landsat 7 短波赤外線バンド。0~255
last_b302012 年の最新の有効なピクセルから構築された Landsat 7 赤バンド。 0~255
last_b402012 年の最新の有効なピクセルから構築された Landsat 7 近赤外線バンド。0~255
last_b50最新の有効なピクセル(2012 年)から構築された最初の Landsat 7 短波赤外線バンド。0~255
last_b70最新の有効なピクセル(2012 年)から構築された 2 番目の Landsat 7 短波赤外線バンド。0~255
datamaskデータなし(0)、マッピングされた地表(1)、恒久的な水域(2)。0、1、2

2000 年の森林被覆をグレースケール画像として表示するには、Map.addLayer() の 2 番目の引数で指定された treecover2000 バンドを使用します。

コードエディタ(JavaScript)

Map.addLayer(gfc2014, {bands: ['treecover2000']}, 'treecover2000');

これにより、図 3 のような画像が生成されます。

米国の樹冠
図 3. 2000 年の米国の樹木エリアのグレースケール画像。

次の画像は、2015 年の Landsat バンド 5、4、3 の 3 つのバンドを使用しています。このバンドの組み合わせでは、健全な植生が緑色、土壌が藤色で表示されます。

コードエディタ(JavaScript)

Map.addLayer(
    gfc2014, {bands: ['last_b50', 'last_b40', 'last_b30']}, 'false color');

結果は図 4 のようになります。

米国のフォールスカラー
図 4. Landsat 7、2015 年の米国の疑似カラー合成。

Global Forest Change データセットの優れたビジュアリゼーションの 1 つは、2000 年の森林の範囲を緑、森林の減少を赤、森林の増加を青で示しています。具体的には、loss を最初のバンド(赤)、treecover2000 を 2 番目のバンド(緑)、gain を 3 番目のバンド(青)にします。

コードエディタ(JavaScript)

Map.addLayer(gfc2014, {bands: ['loss', 'treecover2000', 'gain']}, 'green');

森林減少と森林増加のバンド値はバイナリであるため、画像上ではほとんど見えません。図 5 のようになります。

米国の森林被覆
図 5. 2000 年の米国の樹木エリア(緑色)。

森林の減少を明るい赤色で、森林の増加を明るい青色で表示します。これを修正するには、可視化パラメータ max を使用して、画像データが引き伸ばされる範囲を設定します。max 可視化パラメータは、各バンドの最大値に対応する値のリストを受け取ります。

コードエディタ(JavaScript)

Map.addLayer(gfc2014, {
  bands: ['loss', 'treecover2000', 'gain'],
  max: [1, 255, 1]
}, 'forest cover, loss, gain');

結果は図 6 のようになります。

米国の森林の変化
図 6. 米国の森林損失(赤)、2000 年の森林被覆(緑)、森林増加(青)。

これにより、森林がある場所は緑、森林が失われた場所は赤、森林が増加した場所は青、増加と減少の両方があった場所はマゼンタで表示されます。しかし、詳しく調べると、このコードは正しくないことがわかります。損失は赤ではなくオレンジ色でマークされます。これは、明るい赤色のピクセルが下にある緑色のピクセルと混ざり、オレンジ色のピクセルが生成されるためです。同様に、森林、森林減少、森林増加があるピクセルはピンク色(緑、明るい赤、明るい青の組み合わせ)になります。図 7 の図をご覧ください。

太平洋岸北西部の森林の変化
図 7. 米国太平洋岸北西部の森林減少(赤)、2000 年の被覆(緑)、増加(青)。

チュートリアルの冒頭で約束した画像を取得するには、森林、損失、増加、損失と増加の両方について、別々の画像を作成します。これらの画像を、表示に最適な順序で地図に追加します。

パレット

各画像を異なる色で表示するには、シングルバンド画像に Map.addLayer() の palette パラメータを使用します。パレットを使用すると、画像を表示するカラーパターンを設定できます(パレットの詳細)。Earth Engine API チュートリアルで説明したように、パレットの色は min と max に線形に引き伸ばされます。

たとえば、緑色のパレットを使用して森林範囲の画像を表示するには、次のようにします。

コードエディタ(JavaScript)

Map.addLayer(gfc2014, {
  bands: ['treecover2000'],
  palette: ['000000', '00FF00']
}, 'forest cover palette');

結果は図 8 のようになります。

森林面積 NA
図 8. 2000 年の北米の森林被覆。

ズームインすると、画像の解像度がよくわかります。図 9 は、パラグアイのマリスカル エスティガリビア周辺の地域を示しています。

パラグアイの森林面積
図 9. パラグアイのマリスカル エスティガリビア周辺の 2000 年の樹冠。

図 3 の画像は少し暗いです。問題は、treecover2000 バンドのデータ型がバイト([0, 255])であるのに対し、実際には値がパーセンテージ([0, 100])であることです。画像を明るくするには、min パラメータまたは max パラメータ(あるいはその両方)を適宜設定します。パレットは、これらの極値の間で引き伸ばされます。

コードエディタ(JavaScript)

Map.addLayer(gfc2014, {
  bands: ['treecover2000'],
  palette: ['000000', '00FF00'],
  max: 100
}, 'forest cover percent');

結果は図 9 のようになります。この例では、max のみが設定されています。min はデフォルトで 0 です。

パラグアイ
図 9. パラグアイのマリスカル エスティガリビア周辺の 2000 年の森林被覆。範囲は [0, 100] です。

マスキング

これまで紹介した画像には、データがゼロの大きな黒い領域がありました。たとえば、海に木はありません。これらの領域を透明にするには、値をマスクします。Earth Engine のすべてのピクセルには、値とマスクの両方があります。画像は、マスクによって設定された透明度でレンダリングされます。0 は完全に透明、1 は完全に不透明です。

画像自体をマスクとして使用できます。たとえば、treecover2000 バンドをそれ自体でマスクすると、森林被覆がゼロのすべての領域が透明になります。

コードエディタ(JavaScript)

Map.addLayer(gfc2014.mask(gfc2014), {
  bands: ['treecover2000'],
  palette: ['000000', '00FF00'],
  max: 100
}, 'forest cover masked');

結果は図 10 のようになります。

南北アメリカの樹木エリア
図 10. 2000 年の樹木エリア。ストレッチとマスクが適用されています。

例

チュートリアルの冒頭で紹介したようなハンセン データの可視化は、ほぼ可能です。この例では、1 つの小さな違いを除いて、すべてをまとめています。Map.addLayer 呼び出しで bands パラメータを指定する代わりに、select() を使用して新しい画像を作成しています。

コードエディタ(JavaScript)

var treeCover = gfc2014.select(['treecover2000']);
var lossImage = gfc2014.select(['loss']);
var gainImage = gfc2014.select(['gain']);

// Add the tree cover layer in green.
Map.addLayer(treeCover.updateMask(treeCover),
    {palette: ['000000', '00FF00'], max: 100}, 'Forest Cover');

// Add the loss layer in red.
Map.addLayer(lossImage.updateMask(lossImage),
            {palette: ['FF0000']}, 'Loss');

// Add the gain layer in blue.
Map.addLayer(gainImage.updateMask(gainImage),
            {palette: ['0000FF']}, 'Gain');

結果は図 11 のようになります。

南北アメリカの損失と利益
図 11. 森林の減少(赤)、2000 年の森林被覆(緑)、森林の増加(青)。

addLayer() 呼び出しが 3 つあることを確認します。addLayer() を呼び出すたびに、地図にレイヤが追加されます。地図の右上にある [レイヤ] ボタンにマウスを合わせると、これらのレイヤが表示されます。各レイヤは、横にあるチェックボックスを使用してオンまたはオフにできます。レイヤの不透明度は、レイヤ名の横にあるスライダーで調整できます。

チュートリアルの最初に示した画像を作成できるようになるまで、あと少しです。ただし、損失と増加の両方があるピクセルを示すレイヤがありません。この情報がないのは、どのピクセルで損失と増加の両方が発生しているかを計算する前に、画像バンドでいくつかの計算を実行する方法を知る必要があるためです。これについては、次のセクションで説明します。