包导入
Python API 包称为ee
. 必须为每个新的 Python 会话和脚本导入和初始化它:
import ee
向 Earth Engine 服务器进行身份验证:
ee.Authenticate()
您获取身份验证凭据的方式可能因您的环境而异。有关Colab 和Conda 中身份验证的更多详细信息,请参阅链接 。通常,本地安装的身份验证是生成持久授权令牌的一次性步骤,而诸如 Colab 之类的 VM 服务会限制令牌的生命周期。
初始化 API:
ee.Initialize()
语法
Python 和 JavaScript API 都访问相同的服务器端功能,但客户端表达式可能因语言语法差异而有所不同。下表列出了您在使用 Python API 时会遇到的常见语法差异,相对于 JavaScript API。
JavaScript 和 Python 之间的常见语法差异
物业 | JavaScript | 蟒蛇 |
功能定义 | function myFun(arg) { return arg; } var myFun = function(arg) { return arg; }; |
1. def my_fun(arg): 2. return arg |
匿名函数映射 | var foo = col.map(function(arg) { return arg; }); |
foo = col.map(lambda arg: arg)
|
变量定义 |
var myVar = 'var';
|
1. 2. 3. my_var = 'var' |
逻辑运算符 | var match = such.and(that); var match = such.or(that); var match = such.not(that); |
1. match = such.And(that) 2. match = such.Or(that) 3. match = such.Not(that) |
多行方法链 | var foo = my.really() .reallyLong() .methodChain(); |
1. foo = (my.really() 2. .reallyLong() 3. .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}); |
1. # Positional arguments. 2. foo = fun(arg_x, arg_y, arg_z) 3. # Keyword arguments dictionary. 4. foo = fun(**{'y': arg_y}) 5. # Keyword arguments. 6. foo = fun(x=arg_x, z=arg_z) |
布尔值 | var t = true; var f = false; |
1. t = True 2. 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
对象。
创建导出任务:
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')
启动导出任务:
task.start()
检查导出任务状态:
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、验证和初始化。
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