目录
1、目标
本章的目的是向您介绍 Google Earth Engine 中可用的多种类型的图像集合。其中包括多组单独的卫星图像、预制合成图像(将多个单独的卫星图像合并为一个合成图像)、分类的土地利用和土地覆盖 (LULC) 地图、天气数据和其他类型的数据集。
2、提纲
- 在 Earth Engine 中访问和查看图像集。
- 从图像集合中提取单个场景。
- 在Earth Engine 中应用可视化参数来可视化图像。
3、理论介绍
我们将通过介绍图像集来扩展图像的概念。 Earth Engine 中的图像集合将许多不同的图像组织到一个更大的数据存储结构中。图像集合包括有关位置、收集日期和每个图像的其他属性的信息,使您可以筛选 ImageCollection 以获得分析所需的确切图像特征。
4、实践应用
Earth Engine 中提供了许多不同类型的图像集。这些包括单个卫星图像的集合、将多个图像组合成一个混合图像的预制合成图、分类的 LULC 地图、天气数据和其他非光学数据集。其中每一个都可用于不同类型的分析。例如,最近的一项研究调查了澳大利亚野火的驱动因素(Sulova 和 Jokar 2021)。研究团队使用了欧洲中期天气预报再分析中心 (ERA5) 数据集,该数据集由欧洲中期天气预报中心 (ECMWF) 制作,可在 Earth Engine 中免费获得。我们将在本章后面查看这个数据集。
Section 1、图像集:一组有组织的图像
根据遥感平台运行的时间长短,收集到的地球图像可能有数千或数百万张。在 Earth Engine 中,这些被组织到一个 ImageCollection 中,这是一种专用数据类型,在 Earth Engine API 中具有可用的特定操作。与单个图像一样,可以使用 Map.addLayer 查看它们。
我们将向您展示如何查看和使用它们的最基本属性,并使用这些技能在 Earth Engine 中查看一些主要类型的图像集合。本章将简要介绍地球引擎数据目录,其中包含数十年的卫星图像等等。我们将在以下部分查看一些不同类型的数据集,包括气候和天气数据、数字高程模型和其他地形数据、土地覆盖、农田、卫星图像等。
(1)查看一个图像数据集
美国宇航局和美国地质调查局(USGS)的Landsat计划已经发射了一系列地球观测卫星,命名为Landsat 1,2等。美国陆地卫星自1972年以来一直在返回图像,使该图像集成为对地球表面最长的连续卫星观测。现在,我们将查看有关仍在增长的图像集之一的图像和基本信息:2013 年推出的 Landsat 8 上的可操作陆地成像仪拍摄的场景集合。将以下代码复制并粘贴到中央面板中,然后单击运行。访问庞大的图像目录时,可能需要几分钟才能在“地图”区域中查看结果。您可能会注意到绘制的各个“场景”,这等同于Landsat程序将地球划分为“路径”和“行”的方式。如果查看图像需要几分钟以上,请尝试放大到特定区域以加快该过程。
Map = geemap.Map()
landsat8_col = ee.ImageCollection('LANDSAT/LC08/C02/T1')
# visualize
Map.addLayer(landsat8_col, {'bands': ['B4', 'B3', 'B2'],
'min': 5000,
'max': 15000}, 'landsat8 Collection')
Map
请注意大量的云量和“分层”外观。如果需要,缩小。这是因为地球引擎正在将构成图像集合的每个图像一个接一个地绘制出来。条纹外观是卫星收集图像方式的结果。图像之间的重叠和图像的个体性质意味着这些图像尚未准备好进行分析;我们将在以后的章节中讨论这个问题。
现在检查控制台上的打印尺寸。它将表明数据集中有超过一百万张图像. 如果将来回到这个实验室,这个数字会更大,因为随着卫星收集更多的图像,这个活跃的集合在不断增长。出于同样的原因,图。因此,F1.2.1 在地图上的外观可能略有不同。
(2)影像数据集筛选操作
- 日期筛选
- 位置筛选
- 选取第一幅影像
日期筛选具体操作
landsat8_col_win = landsat8_col.filterDate('2020-12-01', '2021-03-01')
Map.addLayer(landsat8_col_win, {'bands': ['B4', 'B3', 'B2'],
'min': 3000,
'max': 15000}, 'landsat8 collection win')
Map
位置筛选具体操作
第二个常用的过滤工具是filterBounds。此过滤器基于位置,例如点、面或其他几何。复制并粘贴以下代码,以过滤 Landsat 8 影像集合中的冬季影像并将其添加到地图中,以添加到某个点。请注意下面的 Map.addLayer 函数,用于将 pointMN 添加到地图中,其中包含一个空字典 {} 用于 visParams 参数。这仅意味着我们没有为此元素指定可视化参数,而是使用默认参数将其添加到地图中。
point_bj = ee.Geometry.Point([116.39, 39.96])
landsat8_col_bj = landsat8_col.filterBounds(point_bj)
Map.addLayer(landsat8_col_bj, {'bands': ['B7', 'B5', 'B3'],
'min': 3000,
'max': 15000}, 'bj landsat8')
Map
Map.addLayer(landsat8_col_bj, {}, 'bj landsat8-1')
Map
选取第1幅具体操作
我们将探讨的最后一个操作是第一个函数。这将选择图像集合中的第一个图像。这使我们能够在屏幕上放置单个图像进行检查。复制并粘贴以下代码以选择并查看冬季 Landsat 8 图像集合的第一个图像。在这种情况下,由于图像按时间顺序存储在 ImageCollection 中,因此它将选择集合中最早的图像。
landsat8_col_bj_fisrt = landsat8_col_bj.first()
Map.centerObject(landsat8_col_bj_fisrt)
Map.addLayer(landsat8_col_bj_fisrt, {'bands': ['B8', 'B5', 'B2'],
'min': 3000,
'max': 15000}, 'first image')
Map
first 命令采用我们的位置过滤图像堆栈并选择第一个图像。将图层添加到地图区域后,您可以看到只返回了一个图像 - 请记住取消选中其他图层以便能够可视化完整图像. 我们使用 Map.centerObject 将地图居中放在缩放级别为 7 的 landsatFirst 图像上(缩放级别从 0 到 24)。
Section 2、图像集:单个图像的集合
在上一节中了解影像集合时,您使用了 Landsat 8 原始影像数据集。这些原始图像有一些重要的更正已经为您完成了。但是,原始图像只是为 Landsat 8 生成的多个图像集合之一。遥感界开发了其他影像校正,有助于提高分析的准确性和一致性。这些不同影像处理路径的结果都存储在地球引擎中不同的影像集合中。
其中最突出的是ImageCollection,旨在最大限度地减少地球表面和卫星之间大气的影响。由于需要光线穿过大气层,即使在最晴朗的日子里,卫星的视野也变得不精确。大气层遮挡卫星视线有两种重要方式:影响照射地球的阳光量,以及改变电磁能量从地球表面的反射到卫星的接收器。
解开这些影响被称为大气校正,这是一个高度复杂的过程,其细节超出了本书的范围。值得庆幸的是,除了来自卫星的原始图像外,Landsat和某些其他传感器的每张图像都使用最新的大气校正算法自动处理,从而产生一种称为“表面反射率”ImageCollection的产品。表面反射率估计地球表面向上辐射与地球表面向下辐射的比率,模仿传感器在离地面几英尺处盘旋时所看到的。
让我们检查其中一个数据集,旨在最大限度地减少地球表面和卫星之间大气的影响。复制并粘贴以下代码,以按日期导入和过滤 Landsat 8 表面反射率数据 (landsat8SR) 以及美国加利福尼亚州旧金山 (pointSF) 上空的某个点。我们使用第一个函数来选择第一张图像,即 2014 年 3 月 18 日的单个图像。通过在控制台上打印 landsat8SRimage 图像并访问其元数据(参见第 F1.1 章),我们看到波段名称与原始图像中的波段名称不同(图F1.2.7). 在这里,它们的形式为“SR_B*”,如“表面反射波段*”,其中*是波段编号。我们还可以通过查看图像“id”来检查图像的日期(图)。F1.2.7)。 值为“20140318”,该字符串指示图像来自 2014 年 3 月 18 日。
point_bj = ee.Geometry.Point([116.39, 39.96])
# Import the Landsat 8 Surface Reflectance collection.
landsat8SR = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
landsat8SR_bj = landsat8SR.filterDate('2023-01-01', '2023-04-30').filterBounds(point_bj).first()
Map.centerObject(landsat8SR_bj)
Map.addLayer(landsat8SR_bj, {'bands': ['SR_B4', 'SR_B3', 'SR_B2'],
'min': 5000,
'max': 15000}, 'landsat8sr, bj')
Map
Section 3、图像集:预先合成
预制合成从设定区域或时间段的图像集合中获取单个图像,并将它们组合成一个图层。这可以针对许多不同的数据集完成,包括卫星图像(例如 MODIS、Landsat、Sentinel)、气候信息、森林或植被信息等。
例如,图像集合可能在一个位置有多个图像,正如我们在上面的“按位置过滤”示例中看到的那样。一些图像可能有很多云层或其他大气伪影,使图像质量很差。其他图像可能质量非常高,因为它们是在卫星直接在头顶飞行时拍摄的晴天。合成过程需要所有这些不同的图像,选择最好的图像,然后将它们拼接成一个图层。不同的数据集和目标的合成周期可能不同;例如,您可能会遇到每日、每月和/或每年的复合材料。手动执行此操作更高级(例如,参见第 F4.3 章);但是,借助 Earth Engine 中提供的预制复合材料,一些复杂的工作已经为您完成。
(1)MODIS 每日真彩色图像
我们将探讨两个使用 MODIS 传感器数据制成的复合材料示例,这是 Terra 和 Aqua 卫星上的一对传感器。在这些复杂的传感器上,不同的 MODIS 波段以不同的空间分辨率产生数据。对于可见波段,最低常见分辨率为 500 m(红色和 NIR 为 250 m)。
让我们使用下面的代码导入 MCD43A4.006 MODIS Nadir BRDF-Adjusted Reflectance Daily 500 m 数据集并查看最近的图像。这个数据集是基于 16 天的检索周期每天生成的,从 16 天的检索周期中选择最有代表性的像素。 16 天的时间段涵盖标称合成日期两侧的大约8天,更接近目标日期的像素具有更高的优先级。
取消选中其他层(“Landsat 8 SR”),缩小(例如,国家尺度)并在图像周围平移(图 F1.2.9)。请注意图像中没有云,但有些像素没有数据(图 F1.2.10)。这些是持续多云的区域,在所选的特定时期内没有清晰的像素。
# MODIS Daily true-color image
modisDaily = ee.ImageCollection('MODIS/006/MCD43A4')
modisDaily_img = modisDaily.filterDate('2023-01-01')
modisVis = {
'bands':['Nadir_Reflectance_Band1', 'Nadir_Reflectance_Band4', 'Nadir_Reflectance_Band3'],
'min':0,
'max':4000
}
Map.addLayer(modisDaily_img, modisVis, 'MODIS Daily Composite')
Map
(2)MODIS 月度火烧图像
一些 MODIS 波段已被证明可用于确定火灾在哪里燃烧以及燃烧的区域。 Earth Engine 提供针对烧毁区域的月度复合产品。复制并粘贴下面的代码。
# MODIS Monthly Burn image
modisMonthly = ee.ImageCollection('MODIS/006/MCD64A1')
modisMonthly_img = modisMonthly.filterDate('2021-01-01')
Map.addLayer(modisMonthly_img, {}, 'MODIS Monthly Burned')
Map
Section 4、图像集:其他影像产品
卫星还可以收集有关气候、天气和大气中存在的各种化合物的信息。这些卫星利用了部分电磁波谱以及不同物体和化合物在受到不同波长的阳光照射时如何反射。例如,甲烷 (CH4) 反射光谱的 760 nm 部分。让我们仔细看看其中的一些数据集。
(1)甲烷气体
欧洲航天局在 Earth Engine 中提供了 Sentinel-5 的甲烷数据集。复制并粘贴以下代码,将 2018 年 11 月 28 日第一次采集的甲烷数据添加到地图中。我们使用选择功能(参见第 F1.1 章)来选择数据集的甲烷特定波段。我们还为 Map.addLayer 的可视化参数引入了一个新参数的值:我们使用调色板以颜色显示图像的单个波段。在这里,我们选择了不同的颜色,从最小值的黑色到最大值的红色。介于两者之间的值将按照调色板参数(字符串颜色列表:蓝色、紫色、青色、绿色、黄色、红色)列出的顺序显示颜色。
# Import a Sentinel-5 methane dataset.
Map = geemap.Map()
methane = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_CH4')
methane2018 = methane.select('CH4_column_volume_mixing_ratio_dry_air').filterDate('2018-11-28', '2018-11-29').first()
methaneVis = {'palette': ['black', 'blue', 'purple', 'cyan', 'green', 'yellow', 'red'],
'min': 1770,
'max': 1920}
# Center the Map
Map.addLayer(methane2018, methaneVis, 'Methane')
Map
(2)天气和气候数据
Earth Engine 中提供了许多天气和气候数据集。其中之一是 Sulova 和 Jokar (2021) 使用的欧洲中期天气预报再分析中心 (ERA5) 数据集。复制并粘贴下面的代码,将 2018 年 1 月的月度数据添加到地图中。
Map = geemap.Map()
# 导入 ERA5 每月数据集
era5Monthly = ee.ImageCollection('ECMWF/ERA5/MONTHLY')
era5Monthly_Tmp = era5Monthly.select('mean_2m_air_temperature').filterDate('2020-01-01', '2020-01-31').first()
Map.addLayer(era5Monthly_Tmp, {
'palette':['yellow', 'red'],
'min': 260,
'max': 320
})
Map
Section 4、图像集:土地利用与土地覆盖
Earth Engine 中可用的另一种类型的数据集是已经分类的 LULC 地图。这些数据集并没有显示地球表面的外观——即卫星检测到的可见光和其他电磁频谱反射率——拍摄卫星图像并使用它为地球表面的每个像素分配标签。例如,类别可能包括植被、裸土、建筑环境(人行道、建筑物)和水。
(1)ESA世界土地利用
欧洲航天局 (ESA) 根据 Sentinel-1 和 Sentinel-2 数据提供了 2020 年的全球土地覆盖图。 WorldCover 使用 11 种不同的土地覆盖类别,包括建成区、农田、开阔水域和红树林。复制并粘贴下面的代码以将此图像添加到地图中。在此数据集中,带“地图”已包含与 11 个土地覆盖类值关联的调色板颜色。
Map = geemap.Map()
# 导入 ESA WorldCover 数据集。
worldCover = ee.ImageCollection('ESA/WorldCover/v100').first()
Map.centerObject(worldCover)
Map.addLayer(worldCover, {'bands': ['Map']}, 'WorldCover')
Map
(2)全球森林变化
另一个已为您预先分类并在 Earth Engine 中可用的土地覆盖产品是全球森林变化数据集。该分析是在 2000 年至 2020 年之间进行的。与 WorldCover 数据集不同,该数据集侧重于基准年 2000 年地球表面树木覆盖率的百分比,以及该百分比随时间的变化情况。复制并粘贴下面的代码以可视化 2000 年的树木覆盖率。请注意,在下面的代码中,我们将可视化参数定义为变量 treeCoverViz,而不是在 Map.addLayer 函数中完成其计算。
Map = geemap.Map()
# 导入 Hansen 全球森林变化数据集。
globalForest = ee.Image('UMD/hansen/global_forest_change_2020_v1_8')
treeCovVis = {
'bands':['treecover2000'],
'min': 0,
'max': 100,
'palette': ['black', 'green']
}
Map.addLayer(globalForest, treeCovVis, 'global forest')
Map
# 20年来损失的森林情况
treeLossYearVis = {
'bands': ['lossyear'],
'min': 0,
'max': 20,
'palette': ['yellow', 'red']
}
Map.addLayer(globalForest, treeLossYearVis, '2000-2020 year of loss')
Map
Section 4、图像集:其他数据集
Earth Engine 数据目录中还有许多其他类型的数据集,您可以探索这些数据集并将其用于您自己的分析。这些包括全球网格人口计数、地形和地球物理数据。现在让我们探索其中的两个数据集。
(1)网格人口数
世界网格人口数据集估计整个地球表面每个网格单元的人口。复制并粘贴以下代码以添加 2000 人口计数图层。我们使用一个预定义的调色板 populationPalette,它是一个六位数的十六进制字符串列表,表示附加的 RGB 颜色(如第 F1.1 章中所见)。较浅的颜色对应较低的人口数量,较深的颜色对应较高的人口数量。
# 导入和过滤网格化人口数据集。
griddedPop = ee.ImageCollection('CIESIN/GPWv411/GPW_Population_Count').first()
# 预定义的调色板。
popVisPalette = [
'ffffe7', '86a192', '509791', '307296', '2c4484', '000066'
]
Map.centerObject(griddedPop)
Map.addLayer(griddedPop, {'min': 0,
'max': 1200,
'palette': popVisPalette}, 'gridded population')
Map
(2)数字高程模型DEM
数字高程模型 (DEM) 使用机载和卫星仪器来估计每个位置的高程。 Earth Engine 提供本地和全球 DEM。 NASADEM 数据集是可用的全球 DEM 之一,它是从 NASA 任务中生成的 DEM。复制并粘贴下面的代码以导入数据集并可视化高程带。
# 导入 NASA DEM 数据集
nasaDEM = ee.Image('NASA/NASADEM_HGT/001')
Map.addLayer(nasaDEM, {
'bands': ['elevation'],
'min': 0,
'max': 3000
}, 'NASA DEM')
Map