下一章 上一章 目录 设置
3、三识 第1节:图 ...
-
第1节:图像集合
根据遥感平台运行的时间长短,可能会收集数千或数百万张地球图像。在 Earth Engine 中,它们被组织成ImageCollection ,这是一种专用数据类型,在 Earth Engine API 中具有可用的特定操作。与单个图像一样,可以使用Map查看它们。添加图层。
1.1查看图像集
NASA 和美国地质调查局 (USGS) 的 Landsat 计划发射了一系列地球观测卫星,名为 Landsat 1、2等。Landsat 自1972年以来一直在传回图像,这使得该图像集成为最长的连续卫星图像集观测地球表面。现在,我们将查看仍在增长的图像集合之一的图像和基本信息:由2013年发射的 Landsat 8上的操作陆地成像仪拍摄的场景集合。将以下代码复制并粘贴到中心面板中,然后单击运行。当访问巨大的图像目录时,可能需要几分钟才能在地图区域中看到结果。你可能会注意到所绘制的各个“场景”,这相当于陆地卫星计划将地球划分为“路径”和“行”的方式。如果需要超过几分钟才能看到图像,请尝试放大到特定区域以加快该过程。
/ Import the Landsat 8 Raw Collection.
var landsat8=ee.ImageCollection(\'LANDSAT/LC08/C02/T1\');
// Print the size of the Landsat 8 dataset.
print(\'The size of the Landsat 8 image collection is:\', landsat8
.size());
// Try to print the image collection.
// WARNING! Running the print code immediately below produces an error because
// the Console can not print more than 5000 elements.
print(landsat8);
// Add the Landsat 8 dataset to the map as a mosaic. The collection is
// already chronologically sorted, so the most recent pixel is displayed.
Map.addLayer(landsat8,
{
bands:[\'B4\', \'B3\', \'B2\'],
min:5000,
max:15000
},
\'Landsat 8 Image Collection\');
注意大量的云层和“分层”的外观。如果需要的话缩小。这是因为 Earth Engine 将构成ImageCollection的每张图像都绘制在另一张之上。条纹外观是卫星收集图像的结果。图像之间的重叠以及图像的个体性质意味着这些图像还没有完全准备好进行分析;我们将在以后的章节中讨论这个问题。
现在检查控制台上的打印尺寸。它将表明数据集中有超过一百万张图像。如果你将来回到这个实验室,这个数字会更大,因为随着卫星收集更多图像,这个活跃的集合正在不断增长。
打印ImageCollection 返回了一条错误消息,因为在ImageCollection 上调用print 会将集合中每个图像的名称写入控制台。这是 Earth Engine 内部有意保护的结果。我们不希望看到一百万个图像名称打印到控制台!
1.2过滤图像集合
Earth Engine 中的ImageCollection 数据类型有多种过滤方法,这有助于从更大的集合中精确定位你想要查看或分析的图像。
1.按日期过滤
其中一个过滤器是filterDate ,它允许我们缩小 ImageCollection 的日期范围。将以下代码复制到中心面板(将其粘贴到你之前的代码之后):
// Filter the collection by date.
var landsatWinter=landsat8.filterDate(\'2020-12-01\', \'2021-03-01\');
Map.addLayer(landsatWinter,
{
bands:[\'B4\', \'B3\', \'B2\'],
min:5000,
max:15000
},
\'Winter Landsat 8\');
print(\'The size of the Winter Landsat 8 image collection is:\',
landsatWinter.size());
检查绘制的冬季陆地卫星图。正如第1章中所描述的。Map可视化参数中的5000和15000值。上面代码的addLayer 函数指的是显示值范围的最小值和最大值。
现在看一下过滤Landsat8集合的大小。该数量明显低于整个集合中的图像数量。这是将日期过滤为2020-2021年冬季三个月的结果。
2按地点过滤
第二个常用的过滤工具是filterBounds此过滤器基于位置,例如点、多边形或其他几何图形。复制并粘贴以下代码,过滤并添加来自 Landsat8图像集合的冬季图像,并将其添加到美国明尼苏达州明尼阿波利斯市的某个点。请注意地图下方。addLayer函数将pointMN 添加到地图,其中visParams参数为空字典{}。这仅意味着我们没有为此元素指定可视化参数,而是使用默认参数将其添加到地图中。
// Create an Earth Engine Point object.
var pointMN=ee.Geometry.Point([-93.79,45.05]);
// Filter the collection by location using the point.
var landsatMN=landsatWinter.filterBounds(pointMN);
Map.addLayer(landsatMN,
{
bands:[\'B4\', \'B3\', \'B2\'],
min:5000,
max:15000
},
\'MN Landsat 8\');
// Add the point to the map to see where it is.
Map.addLayer(pointMN,{},\'Point MN\');
print(\'The size of the Minneapolis Winter Landsat 8 image collection is:\',
landsatMN.size());
如果我们取消选中Layers下的 Winter Landsat 8图层,我们可以看到仅选择了与我们的点相交的图像。根据需要放大或缩小。请注意明尼阿波利斯冬季系列的印刷尺寸——我们只有七张图片。
按边界过滤的明尼阿波利斯冬季系列。第一个仍然表示未应用缩放的地图。该集合显示在红色圆圈内。第二个仍然表示对该区域应用缩放后的地图。红色箭头表示用于按边界过滤的点(黑色)。
3选择第一张图像
我们将探索的最后一个操作是第一个函数。这将选择ImageCollection中的第一张图像。这使我们能够在屏幕上放置单个图像以进行检查。复制并粘贴以下代码以选择并查看明尼阿波利斯冬季 Landsat 8图像集的第一张图像。由于图像按时间顺序存储在 ImageCollection 中,因此它将选择集合中最早的图像。
// Select the first image in the filtered collection.
var landsatFirst=landsatMN.first();
// Display the first image in the filtered collection.
Map.centerObject(landsatFirst,7);
Map.addLayer(landsatFirst,
{
bands:[\'B4\', \'B3\', \'B2\'],
min:5000,
max:15000
},
\'First Landsat 8\');
第一个命令获取我们的位置过滤图像堆栈并选择第一个图像。当图层添加到地图区域时,你可以看到仅返回一张图像-请记住取消选中其他图层以便能够可视化完整图像。我们使用了地图。centerObject 将地图置于landsatFirst 图像的中心,缩放级别为7(缩放级别从0到24)。
第 2节单幅图像的集合
在上一节中了解图像集合时,你使用了 Landsat 8原始图像数据集。这些原始图像已经为你完成了一些重要的修正。然而,原始图像只是为 Landsat 8生成的多个图像集合之一。遥感界开发了额外的图像校正,有助于提高分析的准确性和一致性。每个不同图像处理路径的结果都存储在 Earth Engine 中不同的ImageCollection中。
其中最突出的是图像收集,旨在最大限度地减少地球表面和卫星之间大气层的影响。即使在最晴朗的日子,由于光线需要穿过大气层,卫星上的视图也变得不精确。大气层有两种重要方式遮挡卫星的视野:影响照射到地球的阳光量,以及改变从地球表面反射到卫星接收器的电磁能。
揭示这些影响被称为大气校正,这是一个高度复杂的过程,其细节超出了本书的范围。值得庆幸的是,除了来自卫星的原始图像之外,陆地卫星和某些其他传感器的每张图像都会自动使用最新的大气校正算法进行处理,从而生成称为“表面反射率” ImageCollection的产品。表面反射率估计地球表面向上辐射率与地球表面向下辐射率的比率,模拟传感器悬停在离地面几英尺的地方时所看到的情况。
让我们检查一下这些数据集之一,该数据集旨在最大限度地减少地球表面和卫星之间大气层的影响。复制并粘贴以下代码,以按日期导入并过滤Landsat 8表面反射率数据 (landsat8SR) 以及美国加利福尼亚州旧金山上空的点 (pointSF)。我们使用第一个函数来选择第一张图像——2014年3月18日的单张图像。通过在控制台上打印landsat8SRimage图像并访问其元数据,我们发现波段名称与原始图像中的名称不同。在这里,它们的形式为“SR_B*”如“表面反射波段*”,其中*是波段编号。我们还可以通过查看图像“id”来检查图像的日期(图F1.2.7)。它的值为“20140318”,这是一个字符串,表明该图像来自2014年3月18日。
// Collections of single images - Landsat 8 Surface Reflectance
/////
// Create and Earth Engine Point object over San Francisco.
var pointSF=ee.Geometry.Point([-122.44,37.76]);
// Import the Landsat 8 Surface Reflectance collection.
var landsat8SR=ee.ImageCollection(\'LANDSAT/LC08/C02/T1_L2\');
// Filter the collection and select the first image.
var landsat8SRimage=landsat8SR.filterDate(\'2014-03-18\',
\'2014-03-19’)
.filterBounds(pointSF)
.first();
print(\'Landsat 8 Surface Reflectance image\', landsat8SRimage);
将此图像添加到地图中,并在“bands”参数中调整 R、G 和 B 波段以实现真彩色显示。
// Center map to the first image.
Map.centerObject(landsat8SRimage,8);
// Add first image to the map.
Map.addLayer(landsat8SRimage,
{
bands:[\'SR_B4\', \'SR_B3\', \'SR_B2\'],
min:7000,
max:13000
},
\'Landsat 8 SR\');
第3节预制复合材料
预制合成材料从设定区域或时间段的图像集中获取单独的图像,并将它们组合成单层。这可以针对许多不同的数据集进行,包括卫星图像(例如 MODIS、Landsat、Sentinel)、气候信息、森林或植被信息等。
例如,图像集合可能在一个位置有多个图像,正如我们在上面的“按位置过滤”示例中看到的那样。某些图像可能有大量云层或其他大气伪影,导致图像质量较差。其他图像可能质量非常高,因为它们是在卫星直接飞过头顶的晴天拍摄的。合成过程会获取所有这些不同的图像,选择最好的图像,然后将它们拼接成一个图层。对于不同的数据集和目标,合成周期可能不同;例如,你可能会遇到每日、每月和/或每年的综合情况。然而,借助 Earth Engine 中提供的预制复合材料,一些复杂的工作已经为你完成。
3.1MODIS 每日真彩色图像
我们将探讨两个由 MODIS 传感器(Terra 和Aqua卫星上的一对传感器)数据制成的复合材料示例。在这些复杂的传感器上,不同的 MODIS波段会产生不同空间分辨率的数据。对于可见波段,最低常见分辨率为500m(红色和 NIR为250 m)。
让我们使用下面的代码导入MCD43A4。006 MODIS Nadir BRDF 调整反射率每日500m 数据集并查看最近的图像。该数据集基于16天的检索周期每天生成,从16天的周期中选择最佳代表性像素。16天的时间段涵盖标称合成日期两侧约8天,接近目标日期的像素具有更高的优先级。
/// Pre-made composites
/////
// Import a MODIS dataset of daily BRDF-corrected reflectance.
var modisDaily=ee.ImageCollection(\'MODIS/006/MCD43A4\');
// Filter the dataset to a recent date.
var modisDailyRecent=modisDaily.filterDate(\'2021-11-01\');
// Add the dataset to the map.
var modisVis={
bands:[
\'Nadir_Reflectance_Band1\',
\'Nadir_Reflectance_Band4\',
\'Nadir_Reflectance_Band3\'
],
min:0,
max:4000
};
Map.addLayer(modisDailyRecent, modisVis,\'MODIS Daily Composite\');
取消选中其他图层(“Landsat 8 SR”),缩小(例如国家范围)并平移图像。请注意图像中没有云,但有一些像素没有数据。这些是持续多云的区域,在所选的特定时间段内没有清晰的像素。
3.2MODIS 每月燃烧面积
事实证明,某些 MODIS 波段对于确定火灾发生地点以及已烧毁的区域非常有用。Earth Engine 提供针对烧伤区域的每月复合产品。复制并粘贴下面的代码。
// Import the MODIS monthly burned areas dataset.
var modisMonthly=ee.ImageCollection(\'MODIS/006/MCD64A1\');
// Filter the dataset to a recent month during fire season.
var modisMonthlyRecent=modisMonthly.filterDate(\'2021-08-01\');
// Add the dataset to the map.
Map.addLayer(modisMonthlyRecent,{},\'MODIS Monthly Burn\');
第4节其他卫星产品
卫星还可以收集有关气候、天气和大气中存在的各种化合物的信息。这些卫星利用部分电磁频谱以及不同物体和化合物在受到不同波长的阳光照射时的反射方式。例如,甲烷 (CH 4) 反映光谱的760nm 部分。让我们仔细看看其中的一些数据集。
甲烷
欧洲航天局在 Earth Engine 中提供了来自 Sentinel-5的甲烷数据集。复制并粘贴以下代码,将2018年11月28日首次收集的甲烷数据添加到地图中。我们使用选择函数选择数据集的甲烷特定波段。我们还为Map的可视化参数引入了新参数的值。
addLayer :我们使用调色板以彩色显示图像的单个波段。在这里,我们选择了不同的颜色,从黑色(最小值)到红色(最大值)。值在
Between 的颜色将按照Palette参数列出的顺序排列(字符串颜色列表: blue, Purple, clang, green, Yellow, red)。
// Import a Sentinel-5 methane dataset.
var methane=ee.ImageCollection(\'COPERNICUS/S5P/OFFL/L3_CH4\');
// Filter the methane dataset.
var methane2018=methane.select(
\'CH4_column_volume_mixing_ratio_dry_air\')
.filterDate(\'2018-11-28\', \'2018-11-29\')
.first();
// Make a visualization for the methane data.
var methaneVis={
palette:[\'black\', \'blue\', \'purple\', \'cyan\', \'green\',
\'yellow\', \'red\'
],
min:1770,
max:1920
};
// Center the Map.
Map.centerObject(methane2018,3);
// Add the methane dataset to the map.
Map.addLayer(methane2018, methaneVis,\'Methane\');
。
天气和气候数据
Earth Engine 中提供了许多天气和气候数据集。其中之一是 Sulova 和 Jokar (2021)使用的欧洲中期天气预报再分析中心 (ERA5) 数据集。复制并粘贴以下代码,将2018年1月的月度数据添加到地图中。
// Import the ERA5 Monthly dataset
var era5Monthly=ee.ImageCollection(\'ECMWF/ERA5/MONTHLY\');
// Filter the dataset
var era5MonthlyTemp=era5Monthly.select(\'mean_2m_air_temperature\')
.filterDate(\'2018-01-01\', \'2019-01-31\')
.first();
// Add the ERA dataset to the map.
Map.addLayer(era5MonthlyTemp,
{
palette:[\'yellow\', \'red\'],
min:260,
max:320
},
\'ERA5 Max Monthly Temp\');
使用检查器工具检查该图像中的一些温度。如果需要,可以平移和缩小。单位为开尔文,即摄氏度加273.15度。
第五节土地利用和土地覆盖预分类
Earth Engine 中可用的另一种数据集是已分类的 LULC 地图。这些数据集不是显示地球表面的外观(即卫星检测到的可见光和其他电磁频谱反射率),而是采用卫星图像并使用它为地球表面上的每个像素分配标签。例如,类别可能包括植被、裸露土壤、建筑环境(人行道、建筑物)和水。
欧空局环球报道
欧洲航天局 (ESA) 根据 Sentinel-1和 Sentinel-2数据提供了2020年全球土地覆盖图。WorldCover 使用11种不同的土地覆盖类别,包括建成区、农田、开放水域和红树林。复制并粘贴以下代码以将此图像添加到地图中。在此数据集中,“地图”区域已包含与11个土地覆盖类别值关联的调色板颜色。
// Import the ESA WorldCover dataset.
var worldCover=ee.ImageCollection(\'ESA/WorldCover/v100\').first();
// Center the Map.
Map.centerObject(worldCover,3);
// Add the worldCover layer to the map.
Map.addLayer(worldCover,{
bands:[\'Map\']
},\'WorldCover\');
检查 WorldCover 土地覆盖分类。
全球森林变化
Earth Engine 中提供的另一个已为你预先分类的土地覆盖产品是全球森林变化数据集。该分析是在2000年至2020年之间进行的。与 WorldCover 数据集不同,该数据集重点关注2000年基准年地球表面的树木覆盖百分比以及随时间的变化情况。复制并粘贴下面的代码以可视化2000年的树木覆盖率。请注意,在下面的代码中,我们将可视化参数定义为变量treeCoverViz ,而不是在Map中完成其计算。添加图层功能。
// Import the Hansen Global Forest Change dataset.
var globalForest=ee.Image(
\'UMD/hansen/global_forest_change_2020_v1_8\');
// Create a visualization for tree cover in 2000.
var treeCoverViz={
bands:[\'treecover2000\'],
min:0,
max:100,
palette:[\'black\', \'green\']
};
// Add the 2000 tree cover image to the map.
Map.addLayer(globalForest, treeCoverViz,\'Hansen 2000 Tree Cover\');
请注意树木覆盖率高的地区(例如亚马逊)的绿色程度较高,而树木覆盖率较低的地区的颜色较暗。如果你在控制台上看到错误,例如“无法读取 null 的属性”,请不要担心。有时 Earth Engine 会显示这些暂时性错误,但它们不会以任何方式影响脚本。
复制并粘贴以下代码以可视化过去20年的树木覆盖损失。
// Create a visualization for the year of tree loss over the past 20 years.
var treeLossYearViz={
bands:[\'lossyear\'],
min:0,
max:20,
palette:[\'yellow\', \'red\']
};
// Add the 2000-2020 tree cover loss image to the map.
Map.addLayer(globalForest, treeLossYearViz,’2000-2020 Year of Loss\')
Map.addLayer(globalForest.select(\'treecover2000\'),{
min:0,
max:100,
palette:[\'black\', \'green\']
},\'Hansen 2001 Tree Cover\');
二者区别为第一个添加了其他波段,第二个只有一个波段。
保留检查前2000个树木覆盖层并分析其顶部的损失层-黄色、橙色和红色区域(图 F1.2.16)。平移并缩放地图。
第6节:其他数据集
Earth Engine 数据目录中还有许多其他类型的数据集,你可以探索并使用它们进行自己的分析。其中包括全球网格人口计数、地形和地球物理数据。现在让我们探索其中两个数据集。
网格人口计数
世界网格人口数据集估计整个地球表面每个网格单元的人口数量。复制并粘贴以下代码以添加2000人口计数图层。我们使用预定义的调色板populationPalette ,它是表示附加RGB颜色的六位十六进制值字符串的列表(如第F1.1章中首先看到的)。较浅的颜色对应于较低的人口数量,较深的颜色对应于较高的人口数量。
// Import and filter a gridded population dataset.
var griddedPopulation=ee.ImageCollection(
\'CIESIN/GPWv411/GPW_Population_Count\')
.first();
// Predefined palette.
var populationPalette=[
\'ffffe7\',
\'86a192\',
\'509791\',
\'307296\',
\'2c4484\',
\'000066\'
];
// Center the Map.
Map.centerObject(griddedPopulation,3);
// Add the population data to the map.
Map.addLayer(griddedPopulation,
{
min:0,
max:1200,
\'palette\': populationPalette
},
\'Gridded Population\');
数字高程模型
数字高程模型 (DEM) 使用机载和卫星仪器来估计每个位置的海拔。Earth Engine 提供本地和全球 DEM。NASADEM 数据集是可用的全球 DEM 之一,它是由 NASA 任务生成的 DEM。复制并粘贴以下代码以导入数据集并可视化高程带。
// Import the NASA DEM Dataset.
var nasaDEM=ee.Image(\'NASA/NASADEM_HGT/001\');
// Add the elevation layer to the map.
Map.addLayer(nasaDEM,{
bands:[\'elevation\'],
min:0,
max:3000
},\'NASA DEM\');