导出图表和图片

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 所示的图表。请注意,图表构造函数的参数包括缩减器和比例,例如 reduceRegion()。由于我们提供的点作为区域只能与一个像素相交,因此使用“first”归约器就足够了。如果您有较大的区域,则应使用“平均值”或其他指定如何聚合像素的缩减器。另请注意,如需直观呈现图表,您只需将其打印出来即可。

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

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

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

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