Google Earth Engine(GEE)——客户端python的安装与使用

2024-02-02 08:21:08 浏览数 (1)

包导入

Python API 包称为ee. 必须为每个新的 Python 会话和脚本导入和初始化它:

代码语言:javascript复制
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

代码语言:javascript复制
import datetime

转换为客户端日期:ee.Date

代码语言:javascript复制
ee_date = ee.Date('2020-01-01')
py_date = datetime.datetime.utcfromtimestamp(ee_date.getInfo()['value']/1000.0)

将客户端日期转换为ee.Date:

代码语言:javascript复制
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 对象以从服务器到客户端获取所需的对象:

代码语言:javascript复制
# 加载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对象添加一个用于处理地球引擎图块的方法。方法如下:

代码语言:javascript复制
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 &copy; <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.pprintimport pprint

0 人点赞