1简介
在本模块中,我们将讨论以下概念:
定义 Google 地球引擎中的主要数据类型以及如何使用它们。
如何探索数据集并限制特定研究站点的输出。
如何可视化火灾前后景观之间光合活动的差异。
2背景
遥感可以成为生态学家在更大空间尺度上了解研究系统或感兴趣区域的有力工具。单独的遥感工具不能替代实地工作或样品的物理收集,但有助于描述时空景观特征,从而加深我们对生态过程的理解。
有许多数据源可用于下载遥感数据产品,但收集这些数据集长期以来一直是一项繁琐且耗时的任务。Google 地球引擎 (GEE) 消除了传统上使用遥感数据所涉及的下载、预处理和繁重的计算环境。虽然针对“大数据”进行了优化,但 GEE 是一个灵活且透明的平台,可以处理从林业到干旱监测再到作物制图的各种研究领域。
在本模块中,您将开始使用来自国家农业影像计划 (NAIP) 的数据来探索 GEE 的功能。NAIP 数据包括在美国大陆农业生长季节获取的航空影像。根据给定的位置和时间范围,NAIP 图像以四个波段收集:蓝色、绿色、红色和近红外。有关 NAIP 的更多信息,请点击此处。
3开始使用 Google 地球引擎
Google Earth Engine 是一个基于 Web 的平台,提供对大型地理空间数据库(通常为栅格格式)的访问权限,并且是 Google 服务器上的分布式计算环境,可让您快速提出问题并开发可测试的工作流程。但是,GEE 确实需要通过 Google 帐户进行注册。因此,在继续此模块之前,您需要创建一个帐户/注册。您可以在GEE 注册页面上注册并信息。注册后,导航到code.earthengine.google.com,然后继续学习该模块。
3.1浏览用户界面
下图是您第一次访问 GEE 主页时将看到的内容。下面列出的是了解我们将在这些模块中定期访问的功能的快速指南。有关整个用户界面的更详细介绍,请单击屏幕右上角的图标,然后从下拉菜单中单击“功能导览”。
Google 地球引擎界面。按照下面的编号了解每个交互部分的扩展定义。
- 搜索栏
这是 GEE 用户可用的无数数据集的便捷快捷方式。搜索城市名称(“地点”)是放大到所需地理位置的便捷方式。
- 左面板
脚本
在此选项卡中,您保存的任何脚本都将列在“所有者”下。单击脚本的名称将在脚本编辑器窗格中打开其内容。值得庆幸的是,如果在打开新脚本之前有任何未保存的更改,GEE 会提供警告。
文档
在此选项卡中,您将看到编写脚本时要使用的可用函数的分类列表。单击函数名称会显示其定义和要求。在脚本编辑器中,如果您只能记住部分函数名称,则可以通过按 ctrl-space(Mac 上为 cmd-space)调出建议列表来避免查找它。
资产
您上传到 GEE 的所有文件都将在此选项卡中列出。单击文件名会显示有关文件的一些基本信息,并为您提供导入、共享或删除的选项。更多关于资产的内容将在 第4单元 中介绍。 - 脚本编辑器
这就是神奇发生的地方!所有 GEE 脚本都是用 javascript 编写的(参见第 3.2 节),可以通过单击“运行”按钮或按 ctrl-enter(Mac 上为 cmd-enter)来激活。提醒一句:一定要尽早并经常保存。没有自动保存功能!
4.Right Panel
Inspector
打开此选项卡会更改我们与 Map Viewer 的交互。鼠标光标变为十字准线,单击地图可让我们从特定纬度和经度中采样数据。更多关于“检查器”选项卡的内容将在 第3单元 中介绍。
控制台
这是 GEE 加载时的默认选项卡,包含与在脚本编辑器中访问的数据相关的有用信息以及统计打印输出和错误消息。
任务
在此选项卡中,我们可以跟踪导出/下载队列中任何数据的进度。模块 4将介绍更多关于将数据移出 GEE 的内容。
- 地图查看器
最后,我们所有的图像可视化都将在此窗格中进行。该地图以与谷歌地图相似的方式运行,带有 GEE 专业插件,例如绘制形状和切换可见或隐藏图层的能力。
3.2 JavaScript 简介
GEE 代码编辑器中的所有脚本都是用 JavaScript (JS) 编写的。如果您不熟悉这种编程语言,请不要害怕!JS 有大量的在线资源,而 GEE 实际上对遵守所有规则相当宽松。例如,JS 的标准协议是以分号 (😉 结束每个命令。但是,如果您碰巧忘记了一个,GEE 会在(经常)顺利运行您的代码时提醒您。
3.3数据类型:栅格
GEE 中使用的主要数据类型是栅格,涵盖从本地到全球范围的图像,可从数百个卫星和航空资源获得图像。要开始编写您的第一个脚本,请将下面的代码复制到脚本编辑器窗格中。此代码请求来自 NAIP影像集合的栅格。但是,请求图像集合意味着我们可以访问集合中的所有数据——这比我们实际需要的要多得多。使用该filterDate() 功能修改我们的原始收藏并限制图像数量。
// Call in NAIP imagery as an image collection.
var NAIP = ee.ImageCollection("USDA/NAIP/DOQQ");
// Filter your dataset from the entire collection to the year of interest and extent.
var naip2011 = NAIP
.filterDate("2011-01-01", "2011-12-31");
此代码设置了用于显示或运行对 NAIP 图像集合的一部分进行分析的框架,但仅此而已。在我们为 GEE 提供一个可执行任务之前,它不会对这些信息做任何事情。这意味着当你点击运行时,什么也没有发生。这有点令人困惑,但将 GEE 视为一个懒惰的软件程序。您可以给它指示,但在您请求可交付结果之前,它将推迟执行指示。
3.3.1查看栅格元数据
现在我们已经加载了 NAIP 图像,我们希望在地图上将其可视化。由于 NAIP 是作为一系列图像收集的,我们需要通过定义我们想要使用和可视化的波段来创建多光谱图像(更多关于第2单元的波段)。我们通过设置可视化参数并将它们保存为变量来做到这一点。但在我们设置可视化参数之前,我们需要能够按名称引用波段。要检索此信息,请在搜索栏中键入“NAIP”,然后单击“NAIP:国家农业影像计划”。数据集信息应显示在如下图所示的弹出窗口中。
在搜索栏中单击数据集的名称后查看 NAIP 元数据弹出窗口。
3.3.2定义可视化参数
现在我们知道了我们乐队的名称,我们将把我们的图像添加到我们的地图查看器中。真彩色图像可用于区分土地覆盖类型或景观上的物理对象。使用近红外波段的假彩色图像可以帮助识别景观上的光合作用活跃区域(红色)。由于 NAIP 图像通常以高空间分辨率(1 米)收集,因此在 GEE 中查看整个美国需要很长时间。因此,关注较小的地理范围是一个好主意。
将下面的代码附加到您现有的脚本中,然后单击运行。使用搜索栏,输入并选择 Longmire, WA 将您的地图缩放到雷尼尔山国家公园。您的地图查看器将类似于下图。请记住,您必须在地图查看器中打开“图层”选项卡,然后单击要激活的图层旁边的复选框。
// Define visualization parameters.
var visParamsFalse = {bands:['N', 'R', 'G']};
var visParamsTrue = {bands:['R', 'G', 'B']};
// Add 2011 imagery to the map with false color and true color composites
// here we specify either 'true; or 'false' in the third argument to toggle the layer to show automatically or to stay hidden when the code is exicuted.
Map.addLayer(naip2011,visParamsFalse, "2011_false", true );
Map.addLayer(naip2011,visParamsTrue, "2011_true", false );
3.4数据类型:向量
在其他 GIS 和遥感系统中,点、线和多边形通常被归类为“矢量”对象。在 GEE 中,这些数据被称为几何。一般来说,您将负责上传或创建您希望在 GEE 中使用的几何特征。您可以使用下述任一技术手动创建感兴趣区域 (AOI)。
3.4.1定义关注区域
要探索特定地理区域中的数据,我们可以手动将 AOI 创建为 GEE 界面中的几何特征。这就像选择几何按钮(见下图)并绘制一个多边形来勾勒出您感兴趣的区域一样简单。通过单击初始点来完成几何特征。
当您通过在起始位置放置一个点来完成几何特征时,脚本编辑器顶部将出现一个新特征,其默认名称为geometry。此功能现在可用于限制 GEE 脚本的地理范围。这是一个有用的功能,可以帮助您养成使用 GEE 的习惯,默认是处理地图查看器窗格的范围。您的范围越大,加载输出所需的时间就越长!
注意:单击名称可以重新命名几何特征。要删除该功能,请查看脚本顶部并将鼠标悬停在声明几何对象的代码行上。垃圾桶图标将出现在代码行的左侧。单击要删除的垃圾桶。
另一种限制可视图像范围的方法是使用一组经纬度坐标。在下图中,我们使用该功能将图像限制在High Park Fire的范围内。filterBounds()为了避免每次加载脚本时都必须放大,我们还可以使用该centerObject()功能以预定义的缩放级别自动将 Map Viewer 窗格居中在我们的图像上。
如果您将第 3.3.2 节中的代码替换为以下代码并单击运行,它将生成类似于下图的图像。请注意,行后不需要分号,filterDate()因为我们尚未完成对 NAIP 集合的修改。
// Enter the desired coordinates for the upper left and lower right corners of your study area.
// You can find the lat long coordinates by using the inspector.
var bounds = ee.Geometry.Rectangle([[-105.53,40.75],[-105.17,40.56]]);
// Filter your dataset from the entire collection to the year of interest and extent
// and add the filterBounds function, moving the semicolon to the end of the statement.
var naip2011 = NAIP
.filterDate("2011-01-01", "2011-10-31")
.filterBounds(bounds);
// Define visualization parameters.
var visParamsFalse = {bands:['N', 'R', 'G']};
var visParamsTrue = {bands:['R', 'G', 'B']};
// Add 2011 imagery to the map with false color and true color composites.
Map.addLayer(naip2011,visParamsFalse,"2011_false", false );
Map.addLayer(naip2011,visParamsTrue,"2011_true", false );
Map.centerObject(naip2011, 11);
该ee.geometry.Rectangle()对象成功地界定了我们的 NAIP 图像的范围。
3.5把所有东西放在一起
利用我们在本模块中可视化的 NAIP 数据,我们已准备好使用 GEE 执行此介绍性分析。将额外的 NAIP 数据子集添加到我们的代码中,我们可以直观地比较 High Park Fire 边界内外的植被再生情况。运行以下代码,我们发现虽然真彩色图像有些帮助,但假彩色图像(如下所示)使我们能够轻松地区分低光合活性区域(较高烧伤严重程度)和光合活性相对不变的区域(严重程度低或未燃烧)。
var naip2013 = NAIP
.filterDate("2013-01-01", "2013-12-31")
.filterBounds(bounds);
// add 2013 imagery to the map with false color and true color composites
Map.addLayer(naip2013, visParamsFalse, "2013_false", false );
Map.addLayer(naip2013, visParamsTrue, "2013_true", false );
2011 年(左上)和 2013 年(右上)的真彩色 NAIP 图像与 2011 年(左下)和 2013 年(右下)的假彩色图像相比。
但 NAIP 图像的实用性不仅限于大规模分析。放大到 High Park Fire 的较小区域(如下所示),我们可以看到由于数据集的高分辨率,可以在非常小的范围内评估烧伤程度。
仔细查看通过 NAIP 图像可获得的详细程度。在 2011 年的图像(上)中可以清楚地看到个别树木,而在 2013 年的图像(下)中仍然存在那些在火灾中幸存下来的树木。
4结论
在本单元中,我们介绍了 Google 地球引擎作为生态学家利用遥感数据的强大工具。然后,我们定义了 Google 地球引擎用户界面的交互元素。最后,我们对 NAIP 图像进行了简单的探索,以查看科罗拉多州北部高公园火灾前后的景观尺度差异。
5完整代码
// Call in NAIP imagery as an image collection.
var NAIP = ee.ImageCollection("USDA/NAIP/DOQQ");
// Enter the desired coordinates for the upper left and lower right corners of your study area.
var bounds = ee.Geometry.Rectangle([[-105.53,40.75],[-105.17,40.56]]);
// Filter your dataset from the entire collection to the year of interest and extent.
var naip2011 = NAIP
.filterDate("2011-01-01", "2011-12-31")
.filterBounds(bounds);
// Define visualization parameters.
var visParamsFalse = {bands:['N', 'R', 'G']};
var visParamsTrue = {bands:['R', 'G', 'B']};
// Add 2011 imagery to the map with false color and true color composites.
Map.addLayer(naip2011,visParamsFalse,"2011_false", false );
Map.addLayer(naip2011,visParamsTrue,"2011_true", false );
Map.centerObject(naip2011, 11);
// Add 2013 imagery to the map with false color and true color composites.
var naip2013 = NAIP
.filterDate("2013-01-01", "2013-12-31")
.filterBounds(bounds);
// Add 2013 imagery to the map with false color and true color composites.
Map.addLayer(naip2013,visParamsFalse,"2013_false", false );
Map.addLayer(naip2013,visParamsTrue,"2013_true", false );
6词汇和缩写
AOI:感兴趣的区域
GEE:谷歌地球引擎
JS:JavaScript
NAIP:国家农业影像计划