Python 安装 - Colab 笔记本

Earth Engine Python API 可部署在 Google Colaboratory 笔记本中。Colab 笔记本是可在云端运行的 Jupyter 笔记本,与 Google 云端硬盘高度集成,因此易于设置、访问和共享。如果您不熟悉 Google Colab 或 Jupyter 笔记本,请花一些时间探索 Colab 欢迎网站

以下部分介绍了如何在 Google Colab 中部署 Earth Engine,以及如何使用第三方 Python 软件包直观呈现地图和图表。

打开 Colab 笔记本

您可以从 Google 云端硬盘或 Colaboratory 界面打开笔记本。

新建笔记本

Google 云端硬盘

打开 Google 云端硬盘,然后创建新文件。

  • 新建 > 更多 > Colaboratory
  • 在文件夹中点击右键,然后从上下文菜单中选择 More > Colaboratory

Colab 界面

访问 Colab 网站并创建新文件。

  • File > New > New Python 3 notebook
  • 如果您之前与 Colab 互动过,访问上述链接的网站后,您会看到一个文件浏览器,您可以使用窗口底部的下拉菜单开始创建新文件。

现有笔记本

您可以从 Google 云端硬盘和 Colab 界面打开现有的笔记本文件 (.ipynb)。

Google 云端硬盘

Colab 笔记本可以位于 Google 云端硬盘中的各个文件夹中,具体取决于笔记本文件的创建位置。在 Google 云端硬盘中创建的笔记本将位于其创建或移动到的文件夹中。通过 Colab 界面创建的笔记本默认会保存到名为“Colab Notebooks”的文件夹中,当您开始使用 Colab 时,该文件夹会自动添加到 Google 云端硬盘的“我的云端硬盘”文件夹中。

Colab 文件可以通过黄色“CO”符号和“.ipynb”文件扩展名来识别。打开文件的方式有两种:双击文件,然后从结果页面顶部的按钮中选择打开方式 > Colaboratory;或者右键点击文件,然后从文件的上下文菜单中选择打开方式 > Colaboratory

Colab 界面

通过 Colab 界面打开笔记本,您可以访问 Google 云端硬盘、GitHub 和本地硬件中的现有文件。初次使用后,如果再次访问 Colab 界面,系统会显示文件浏览器模式。在文件探索器顶部的标签页中,选择一个来源,然后找到要打开的 .ipynb 文件。您还可以通过以下方式从 Colab 界面访问文件浏览器:依次选择文件 > 打开笔记本,或使用 Ctrl+O 键盘组合键。

导入 API 并获取凭据

本部分演示了如何导入 Earth Engine Python API 并验证访问权限。此外,我们还以 Colab 笔记本形式提供了本页面上的内容:

Google Colaboratory 默认包含 Earth Engine API,因此只需导入和进行身份验证。您必须在每个新的 Colab 会话中完成这些步骤,或者在重启 Colab 内核时完成这些步骤,或者在 Colab 虚拟机因不活动而被回收时完成这些步骤。

导入 API

运行以下单元格,将 API 导入到您的会话中。

import ee

进行身份验证和初始化

运行 ee.Authenticate 函数以验证您对 Earth Engine 服务器的访问权限,并初始化 ee.Initialize。添加一个代码单元格,输入以下代码行,修改项目,然后运行该单元格。

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

系统会要求您授权访问您的 Earth Engine 账号。按照电池上印制的说明完成此步骤。

测试 API

通过打印珠穆朗玛峰的海拔高度来测试 API。请注意,在使用该 API 之前,您必须先对其进行初始化。在新单元格中运行以下 Python 脚本。

# Print the elevation of Mount Everest.
dem = ee.Image('USGS/SRTMGL1_003')
xy = ee.Geometry.Point([86.9250, 27.9881])
elev = dem.sample(xy, 30).first().get('elevation').getInfo()
print('Mount Everest elevation (m):', elev)

地图可视化图表

ee.Image 对象可以显示到笔记本输出单元格。以下两个示例演示了如何显示静态图片和互动地图。

静态图片

IPython.display 模块包含 Image 函数,该函数可以显示通过调用 Earth Engine getThumbUrl 函数生成的表示图片的网址的结果。以下脚本将显示全球高程模型的缩略图。

# Import libraries.
import ee
from IPython.display import Image

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

# Import a DEM and display a thumbnail of it.
dem = ee.Image('USGS/SRTMGL1_003')
Image(url=dem.updateMask(dem.gt(0))
  .getThumbUrl({'min': 0, 'max': 4000, 'dimensions': 512,
                'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']}))

互动地图

folium 软件包可用于在交互式 Leaflet 地图上显示 ee.Image 对象。Folium 没有用于处理 Earth Engine 中图块的默认方法,因此必须先定义一个方法并将其添加到 folium.Map 模块,然后才能使用。

以下脚本提供了一个示例,展示了如何添加处理 Earth Engine 图块的方法,以及如何使用该方法向 Leaflet 地图显示高程模型。

# Import libraries.
import ee
import folium

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

# Define a method for displaying Earth Engine image tiles to folium map.
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 © Google Earth Engine",
    name = name,
    overlay = True,
    control = True
  ).add_to(self)

# Add EE drawing method to folium.
folium.Map.add_ee_layer = add_ee_layer

# Fetch an elevation model.
dem = ee.Image('USGS/SRTMGL1_003')
# Set visualization parameters.
vis_params = {
  'min': 0,
  'max': 4000,
  'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']}

# Create a folium map object.
my_map = folium.Map(location=[20, 0], zoom_start=3)

# Add the elevation model to the map object.
my_map.add_ee_layer(dem.updateMask(dem.gt(0)), vis_params, 'DEM')

# Add a layer control panel to the map.
my_map.add_child(folium.LayerControl())

# Display the map.
display(my_map)

图表可视化

某些 Earth Engine 函数会生成表格数据,这些数据可由 matplotlib 等数据可视化软件包绘制成图。以下示例展示了如何将 Earth Engine 中的表格数据显示为散点图。如需了解详情,请参阅 Colaboratory 中的图表

# Import libraries.
import ee
import matplotlib.pyplot as plt

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the Earth Engine module.
ee.Initialize(project='my-project')

# Fetch a Landsat TOA image.
img = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_034033_20000913')

# Select Red and NIR bands, scale them, and sample 500 points.
samp_fc = img.select(['B3','B4']).sample(scale=30, numPixels=500)

# Arrange the sample as a list of lists.
samp_dict = samp_fc.reduceColumns(ee.Reducer.toList().repeat(2), ['B3', 'B4'])
samp_list = ee.List(samp_dict.get('list'))

# Save server-side ee.List as a client-side Python list.
samp_data = samp_list.getInfo()

# Display a scatter plot of Red-NIR sample pairs using matplotlib.
plt.scatter(samp_data[0], samp_data[1], alpha=0.2)
plt.xlabel('Red', fontsize=12)
plt.ylabel('NIR', fontsize=12)
plt.show()