目录
1.Earth Engine API
? ? ? ?Google Earth Engine是一个基于云的科学数据分析平台,它提供即用型的云托管数据集和大型服务器。Earth Engine特别吸引人的一个特性是,通过将大型计算分布在大型服务器池中,可以非常快速地运行大型计算,有效使用云托管数据集和计算的能力是由Earth Engine API实现的。
? ? ? ?API是与Earth Engine服务器通信的一种方式,它允许您指定想要进行的计算,然后接收结果。API的设计使得用户不需要担心计算是如何跨机器集群分布的,以及结果是如何组装的。API的用户只需指定需要做什么,通过对用户隐藏实现细节,这极大地简化了代码,对于不熟悉编写代码的用户来说,它也使Earth Engine非常平易近人。
? ? ? Earth Engine API的设计与语言无关,Google提供了官方的客户端库来使用JavaScript和Python的API。无论您使用哪种编程语言,API基本上都是相同的。主要区别在于用于调用API函数的语法。一旦您学习了编程语言的语法,您的代码就可以很容易地进行调整,因为它们都使用相同的API函数。
? ? ? ?Earth Engine API非常庞大,它提供了从简单数学到高级图像处理算法的各种对象和方法。在代码编辑器中,您可以切换到Docs选项卡来查看按对象类型分组的API函数。
? ? ? ?API函数的前缀为ee(代表Earth Engine)(如图1所示),让我们学习使用API。假设您想将两个数字相加,用变量a和b表示,如下所示。创建一个新脚本,并输入以下内容:
var a = 1;
var b = 2;
图 1?Earth Engine API docs
? ? ? ?在之前的学习中,你学习了如何在变量中存储数字,但没有学习如何进行任何计算。这是因为当您使用Earth Engine时,您不使用JavaScript操作符进行加法。例如,您不会写“var c = a + b”来将两个数字相加。相反,Earth Engine API为您提供了执行此操作的函数,无论何时都能使用API函数是很重要的。
? ? ? ?一开始可能看起来很尴尬,但是使用这些函数将帮助您避免超时并创建高效的代码。查看Docs选项卡,您会发现一组可以在ee.Number上调用的方法,展开它以查看可用于处理数字的各种函数。在函数列表中,有一个add函数用于将两个数字相加,这就是你用来添加a和b的方法(图2)。为了添加a和b,我们首先创建一个ee,用ee.Number(a)从变量a中获取数字对象,然后我们可以使用add(b)调用将b的值加到它上面。下面的代码显示了语法并输出结果,当然,结果是值3:
var result = ee.Number(a).add(b);
print(result);
? ? ? 到目前为止,您可能已经意识到,当学习在Earth Engine中编程时,您不需要深入学习JavaScript或python ,相反,它们是访问Earth Engine API的方法,无论从JavaScript还是Python调用,该API都是相同的。
图 2?ee.Number 模块
? ? ? ? 这里有另一个例子来说明这一点,假设您正在处理一项任务,该任务要求您以五年为间隔创建一个从1980年到2020年的年份列表。如果您面临这个任务,第一步是切换到Docs选项卡并打开ee,模块列表,浏览一下这些函数,看看是否有什么函数可以提供帮助,您将注意到一个函数ee.List.sequence,单击它将显示该函数的文档(图3)。sequence函数能够生成一个从给定的起始值到结束值的数字序列。它还有一个可选参数步骤表示每个数字之间的增量,我们可以创建一个ee,通过使用以下值调用此预定义函数,表示从1980年到2020年的年份,按5计数的数字列表:start = 1980, end = 2020, step = 5。
图 3?ee.List.sequence 函数
var yearList = ee.List.sequence(1980, 2020, 5);
print(yearList);
图 4?ee.List.sequence 函数的输出
? ? ? ?在控制台中打印的输出将显示变量yearList确实包含具有正确间隔的年份列表(图4)。您刚刚在Earth Engine API的帮助下完成了一个中等复杂的编程任务。
? ? ? ?假设您在下面的代码中定义了以下两个字符串变量,使用Earth Engine API通过组合这两个字符串来创建一个名为result的新字符串变量,在控制台中打印它,打印的值应该是“Sentinel2A”。
var mission = ee.String('Sentinel');
var satellite = ee.String('2A');
? ? ? 提示:使用ee中的cat函数。字符串模块连接(连接在一起)两个字符串,使用的代码如下所示:
var mission = ee.String('Sentinel');
var satellite = ee.String('2A');
var catString=ee.String(mission).cat(satellite);
print(catString);
? ? ?打印结果如图5所示:
图5?打印结果