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);

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

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

ご心配なく。すぐに見た目を改善できます。(Earth Engine のデフォルトの画像可視化の詳細をご覧ください)。このセクションの終わりまでに、図 2 のような画像が作成されます。緑色は 2000 年に森林が検出された場所、赤色は調査期間中に推定された森林の減少、青色はその期間中の森林の増加、マゼンタは森林の減少と増加の両方があった地域、非森林地域はマスクされています。

forest change custom
図 2. Hansen et al.(2013 年)の森林変化データのカスタム可視化。

マルチバンド画像をマップに追加すると、画像の最初の 3 つのバンドがそれぞれ赤、緑、青として選択され、各バンドのデータ型に従ってストレッチされることを思い出してください。画像が赤く見えるのは、最初の 3 つのバンドが treecover2000lossgain であるためです。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 年(または 2000 年に有効なピクセルがない場合はそれ以前)の最初の有効なピクセルから構築された Landsat 7 の赤色バンド。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 チュートリアルで説明したように、パレットの色は minmax に線形に引き伸ばされます

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

コードエディタ(JavaScript)

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

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

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

拡大すると、画像の解像度をより正確に把握できます。図 9 は、パラグアイの Mariscal Estigarribia 周辺のエリアを示しています。

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

図 3 に示す画像は少し暗いです。問題は、実際には値がパーセンテージ([0, 100])であるにもかかわらず、treecover2000 バンドのデータ型がバイト([0, 255])であることです。画像を明るくするには、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 年の樹木被覆率。ストレッチ処理とマスク処理が施されています。

チュートリアルの冒頭にあるような Hansen データの可視化をほぼ実現できます。この例では、すべてをまとめていますが、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() を呼び出すたびに、地図にレイヤが追加されます。マップの右上にある [レイヤ] ボタンにカーソルを合わせると、これらのレイヤが表示されます。各レイヤのオンとオフは、その横にあるチェックボックスで切り替えることができます。レイヤの不透明度は、レイヤ名の横にあるスライダーで調整できます。

チュートリアルの冒頭に表示されている画像とほぼ同じ画像を作成できます。ただし、損失とゲインの両方があるピクセルを示すレイヤがありません。これは、損失とゲインの両方を示すピクセルを計算する前に、画像バンドで計算を実行する方法を知る必要があるためです。これについては、次のセクションで説明します。