导出图表和图片

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 随时间变化的图表。如需制作此类图表,第一步是选择感兴趣的位置。通过获取点绘制工具 () 创建一个点,并在感兴趣的区域中创建一个单点几何图形。(如果您已经有导入内容,请将鼠标悬停在几何图形导入上,然后先点击 + 新建图层)。 在农田、落叶林、一年生草地或其他具有年度周期的土地覆盖区域中找到该点。将导入命名为 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 的图表。请注意,图表构造函数的参数包括一个 reducer 和一个比例(如 reduceRegion())。由于我们作为区域提供的点只能与一个像素相交,因此使用“first”reducer 就足够了。如果区域较大,您应使用“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
});

运行此代码时,请注意,系统会在任务标签页中创建一项新任务。 如需启动导出配置对话框,请点击任务标签页中的运行按钮。配置完任务后,点击对话框中的运行按钮即可开始导出。但在您这样做之前,请注意:

在不使用 region 参数的情况下导出时,您应谨慎行事,因为如果您为 scale 设置了相对较小的值,并且地图缩小到较大区域,那么您可能会将非常大的图片导出到云端硬盘文件夹。如需了解详情以及可能的配置参数列表,请参阅文档标签页中的 Export.image.toDrive() 文档。

Earth Engine API 简介到此结束!现在,您已经了解了 Earth Engine 的大部分最常见功能,应该能够自信地进行更复杂的分析。请务必阅读文档并在论坛中搜索其他问题的答案。祝大家编码顺利!