包导入
Python API 包称为ee
. 必须为每个新的 Python 会话和脚本导入和初始化它:
import ee
向 Earth Engine 服务器进行身份验证:
代码语言:javascript复制ee.Authenticate()
您获取身份验证凭据的方式可能因您的环境而异。有关Colab 和Conda 中身份验证的更多详细信息,请参阅链接 。通常,本地安装的身份验证是生成持久授权令牌的一次性步骤,而诸如 Colab 之类的 VM 服务会限制令牌的生命周期。
初始化 API:
代码语言:javascript复制ee.Initialize()
语法
Python 和 JavaScript API 都访问相同的服务器端功能,但客户端表达式可能因语言语法差异而有所不同。下表列出了您在使用 Python API 时会遇到的常见语法差异,相对于 JavaScript API。
物业 | JavaScript | 蟒蛇 |
---|---|---|
功能定义 | function myFun(arg) { return arg; } var myFun = function(arg) { return arg; }; | def my_fun(arg): return arg |
匿名函数映射 | var foo = col.map(function(arg) { return arg; }); | foo = col.map(lambda arg: arg) |
变量定义 | var myVar = 'var'; | my_var = 'var' |
逻辑运算符 | var match = such.and(that); var match = such.or(that); var match = such.not(that); | match = such.And(that) match = such.Or(that) match = such.Not(that) |
多行方法链 | var foo = my.really() .reallyLong() .methodChain(); | foo = (my.really() .reallyLong() .methodChain()) |
字典键 | var dic = {'key': value}; var dic = {key: value}; | dic = {'key': value} |
字典对象访问 | var value = dic.key; var value = dic['key']; | value = dic['key'] |
函数参数定义 | // Positional arguments.位置参数对象 var foo = fun(argX, argY, argZ); // Keyword arguments object.键值参数对象 var foo = fun({y: argY}); | # Positional arguments. foo = fun(arg_x, arg_y, arg_z) # Keyword arguments dictionary. foo = fun(**{'y': arg_y}) # Keyword arguments. foo = fun(x=arg_x, z=arg_z) |
布尔值 | var t = true; var f = false; | t = True f = False |
空值 | var na = null; | na = None |
注释 | //注释 /* 段落注释 */ | # |
于 Python API 语法的注意事项:
- 匿名函数映射是通过函数实现的 ,它只接受一个表达式。当需要复杂的映射操作时,使用传统的命名函数。
lambda
- 作为关键字参数字典提供的函数参数必须指定为**kwargs;即,在函数输入字典前加上两个星号:
y = fun(**{'x': 0})
或y = fun(**arg_dict)
。
日期对象
使用模块定义和操作客户端日期对象 。在脚本中包含模块: datetime
import datetime
转换为客户端日期:ee.Date
ee_date = ee.Date('2020-01-01')
py_date = datetime.datetime.utcfromtimestamp(ee_date.getInfo()['value']/1000.0)
将客户端日期转换为ee.Date:
py_date = datetime.datetime.utcnow()
ee_date = ee.Date(py_date)
导出数据
使用 Python API 导出数据需要使用ee.batch
模块,该模块提供了Export
函数的接口 。像使用 JavaScript API 一样传递参数参数,注意上面语法表中指出的差异。导出任务必须通过start()
对定义的任务调用方法来启动。通过调用任务的status()
方法来查询任务的状态。以下示例演示导出ee.Image
对象。
创建导出任务:
代码语言:javascript复制task = ee.batch.Export.image.toDrive(image=my_image, # an ee.Image object.
region=my_geometry, # an ee.Geometry object.
description='mock_export',
folder='gdrive_folder',
fileNamePrefix='mock_export',
scale=1000,
crs='EPSG:4326')
启动导出任务:
代码语言:javascript复制task.start()
检查导出任务状态:
代码语言:javascript复制task.status
注意:从 Python API 启动的任务也将出现在同一 Google 帐户的 JavaScript代码编辑器的“任务”选项卡中 。
打印对象
在 Python 中打印 Earth Engine 对象会打印对象的序列化请求,而不是对象本身。请参阅 客户端与服务器页面以了解其原因。
调用getInfo()
Earth Engine 对象以从服务器到客户端获取所需的对象:
# 加载Landsat 影像.
img = ee.Image('LANDSAT/LT05/C01/T1_SR/LT05_034033_20000913')
# 不调用 getInfo() 打印图像对象;打印序列化的请求指令。
#这个比较省事
print(img)
# 通过调用 getInfo() 打印图像对象;打印图像元数据。
#注意两者的区别一个是获取影像的基本信息,一个是获取元数据
print(img.getInfo())
请注意,这getInfo()
是一个同步操作,这意味着getInfo()
调用之后的表达式的执行将被阻止,直到结果返回给客户端。此外,对大量数据或昂贵计算的请求可能会返回错误和/或挂起。通常,最佳做法是 导出您的结果,完成后,将它们导入新脚本以进行进一步分析。
注意:调用getInfo()
脚本会阻止执行。此外,对大量数据或昂贵计算的请求可能会返回错误和/或挂起。 导出以获得昂贵、大型或长时间运行的计算的结果。
用户界面对象
Earth Engineui
模块只能通过 JavaScript API 代码编辑器使用。在 Python 中为 UI 元素使用第三方库。 Folium和 ipyleaflet提供交互式地图处理,而图表可以使用Matplotlib、 Altair或 seaborn来完成, 仅举几例。有关使用 Folium 和 Matplotlib 的信息,请参阅 Colab 设置笔记本中的地球引擎中的示例。
开发人员指南中的 Python
地球引擎开发人员指南中的一些示例包含 Python 代码(请继续关注!)。在这些特定页面上,您会在页面顶部找到按钮,将其作为 Colab Jupyter 笔记本运行或在 GitHub 上查看。您还将找到选项卡式代码片段小部件,它们允许您在 JavaScript 代码编辑器代码和等效的 Python Colab 代码之间切换。Colab 笔记本包含运行示例所需的一切,但如果您要复制和粘贴代码以在您自己的环境中运行,则需要先进行一些设置。
地球引擎设置
几乎每个示例都使用 Earth Engine API,因此您需要导入 API、验证和初始化。
代码语言:javascript复制import ee
ee.Authenticate()
ee.Initialize()
注意:如果您在 Colab 之外的环境中运行 Earth Engine Python 代码,则需要确保已安装 API 并且已将身份验证凭据保存到您的系统中。后续使用将只需要导入 API 并对其进行初始化。了解有关安装和 身份验证的更多信息 。
Folium交互式地图展示
所述大青叶 文库可用于显示ee.Image
对象的交互式地图。当 Python 示例显示地图图块时,整个地球引擎开发人员指南页面都使用 Folium 地图。在您可以运行这些示例之前,您需要将 Folium 导入您的 Python 会话,并向folium.Map
对象添加一个用于处理地球引擎图块的方法。方法如下:
import folium
#定义一个加载的图层的函数然后设定对象,视觉参数和名称等,当然这里需要接入Google所以要科学上网
def add_ee_layer(self, ee_image_object, vis_params, name):
map_id_dict = ee.Image(ee_image_object).getMapId(vis_params)
folium.raster_layers.TileLayer(
tiles=map_id_dict['tile_fetcher'].url_format,
attr='Map Data © <a href="https://earthengine.google.com/">Google Earth Engine</a>',
name=name,
overlay=True,
control=True
).add_to(self)
folium.Map.add_ee_layer = add_ee_layer
注意: Folium 可能需要安装在 Colab 之外的环境中;每一次都需要重新加载,因为过后会重新进行验证
漂亮的印刷品
一些打印的 Earth Engine 对象采用嵌套的 JSON 格式,该格式很长和/或很复杂。为了提高这些情况下的可读性,使用了该 函数;根据需要直接包含在示例中。 pprint.pprint
import pprint