グラフと画像をエクスポートする

Earth Engine は強力な分析ツールですが、グラフ、画像、地図などをレポートや出版物に埋め込むために、分析結果をエクスポートする必要がある場合があります。このセクションでは、他のソフトウェアにエクスポートして表示できるグラフと画像を作成する方法について説明します。前のセクションでは、次のようなコードを使用して、コレクション内のすべての画像に NDVI バンドを追加しました。l8 変数は Landsat 8 TOA 反射率コレクションを参照しています。

コードエディタ(JavaScript)

// Import the Landsat 8 TOA image collection.
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

// Map a function over the Landsat 8 TOA collection to add an NDVI band.
var withNDVI = l8.map(function(image) {
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
  return image.addBands(ndvi);
});

グラフを作成します

特定の場所における NDVI の経時変化を示すグラフが必要だとします。このようなグラフを作成するには、まず関心対象地域を選択します。ポイント描画ツール()を取得してポイントを作成し、対象エリアに単一ポイント ジオメトリを作成します。(すでにインポートしている場合は、[Geometry Imports] にカーソルを合わせて、[+ new layer] をクリックします)。農業、落葉樹林、一年生草地、または年間サイクルを持つその他の土地被覆のエリアでポイントを見つけます。インポートに roi という名前を付けます。(プログラムでジオメトリを作成する方法については、こちらのページをご覧ください)。

次に、roi ポイントを使用して、そのポイントの下のピクセルにおける NDVI の経時変化を示すグラフを作成します。Earth Engine でグラフを作成するには、ui.Chart パッケージを使用します。(Earth Engine でのグラフ作成の詳細)。 具体的には、時系列グラフを作成するには、ui.Chart.image.series() メソッドを使用します。

コードエディタ(JavaScript)

// Create a chart.
var chart = ui.Chart.image.series({
  imageCollection: withNDVI.select('NDVI'),
  region: roi,
  reducer: ee.Reducer.first(),
  scale: 30
}).setOptions({title: 'NDVI over time'});

// Display the chart in the console.
print(chart);

roi ジオメトリでは、農業地域のポイントを選択したため、図 10 のようなグラフが表示されます。グラフ コンストラクタのパラメータには、reduceRegion() などのレデューサとスケールが含まれます。リージョンとして指定するポイントは 1 つのピクセルとしか交差しないため、「first」レデューサを使用するだけで十分です。より大きなリージョンがある場合は、「mean」またはピクセルの集計方法を指定する別のレデューサを使用する必要があります。また、グラフを可視化するには、グラフを印刷するだけで済みます。

Tutorial_api_10_ndvi_chart.png
図 10. ポイント ジオメトリにおける Landsat NDVI の推移のグラフ。

余談: Landsat のシンプルな雲マスキング

このグラフで、ある地点の NDVI 値の時系列に少しノイズがあることに気づいたかもしれません。これは雲が原因である可能性があります。この影響を軽減するため、Earth Engine には、熱バンドを備えた Landsat センサー用の雲マスキング アルゴリズム ee.Algorithms.Landsat.simpleCloudScore() が含まれています。Landsat TOA 反射率画像を入力として受け取り、cloud という名前のバンドを追加します。これは、ピクセル内の雲量を 0 から 100(雲量が最も少ないものから最も多いもの)で表すインデックスです。コレクションにマッピングした関数を変更することで、クラウド インデックスに任意のしきい値(20)を使用して、グラフを少し整理できます。

コードエディタ(JavaScript)

var cloudlessNDVI = l8.map(function(image) {
  // Get a cloud score in [0, 100].
  var cloud = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud');

  // Create a mask of cloudy pixels from an arbitrary threshold.
  var mask = cloud.lte(20);

  // Compute NDVI.
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');

  // Return the masked image with an NDVI band.
  return image.addBands(ndvi).updateMask(mask);
});

print(ui.Chart.image.series({
  imageCollection: cloudlessNDVI.select('NDVI'),
  region: roi,
  reducer: ee.Reducer.first(),
  scale: 30
}).setOptions({title: 'Cloud-masked NDVI over time'}));

雲がマスクされた結果を図 11 に示します。時系列は少し滑らかに見えますが、雲の影響を受けたピクセルがまだ含まれている可能性があります。クラウド インデックスのしきい値を調整し、グラフ化された時系列を観察して、このしきい値が結果にどのように影響するかを確認します。

Tutorial_api_11_cloudless_chart.png
図 11. ポイント ジオメトリにおける雲マスクされた NDVI の時系列グラフ。

イメージのエクスポート

Earth Engine で計算されたデータのグラフをエクスポートする方法を説明しましたが、画像全体をエクスポートする場合はどうすればよいでしょうか。たとえば、前のセクションで説明したように、最も緑色のピクセルを合成したとします。

コードエディタ(JavaScript)

var greenest = cloudlessNDVI.qualityMosaic('NDVI');

このコードと以前のコードの唯一の違いは、今回は雲がマスクされたコレクションを使用していることです。Export パッケージを使用して、このサブセット(リージョンで定義)をエクスポートできます。(Earth Engine からのラスターデータとベクターデータのエクスポートの詳細)たとえば、他のドキュメントに簡単に埋め込むことができる画像をエクスポートするには、以前に行ったように可視化画像を作成し、Google ドライブ フォルダにエクスポートします。

コードエディタ(JavaScript)

// Create a 3-band, 8-bit, color-IR composite to export.
var visualization = greenest.visualize({
  bands: ['B5', 'B4', 'B3'],
  max: 0.4
});

// Create a task that you can launch from the Tasks tab.
Export.image.toDrive({
  image: visualization,
  description: 'Greenest_pixel_composite',
  scale: 30
});

このコードを実行すると、[タスク] タブに新しいタスクが作成されます。 エクスポート構成ダイアログを起動するには、[タスク] タブの [実行] ボタンをクリックします。タスクを構成したら、ダイアログの [Run] ボタンをクリックしてエクスポートを開始します。ただし、その前に注意すべき点があります。

region 引数を指定せずにエクスポートする際に注意が必要な理由は、scale に比較的小さい値を設定し、地図を広い領域にズームアウトすると、非常に大きな画像がドライブ フォルダにエクスポートされる可能性があるためです。詳細と、使用可能な構成パラメータのリストについては、[ドキュメント] タブの Export.image.toDrive() ドキュメントをご覧ください。

Earth Engine API の概要は以上です。これで、Earth Engine の最も一般的な機能の多くを理解できたので、より複雑な分析に自信を持って進むことができるはずです。その他の質問については、ドキュメントを読み、フォーラムを検索してください。ぜひコーディングにお役立てください。