3139 字
16 分钟
geemap:一个支持交互式地理空间分析与可视化的Python包

随着云计算和大数据技术在地理空间领域的广泛应用,Google Earth Engine (GEE) 凭借其集成的海量卫星遥感影像和地理空间数据集以及强大的算力资源,已成为处理和分析海量遥感与地理空间数据的强大平台,为全球范围内的环境监测、资源管理、灾害响应等应用提供了前所未有的数据分析能力。

然而,GEE原生支持的JavaScript API虽然功能全面,但对于习惯Python生态系统的研究人员和开发者而言,存在一定的学习曲线和整合难度。为了弥合这一差距,开源Python软件包geemap 应运而生,它建立在 ipyleaflet 和 folium 等库之上,成为连接Python与GEE的桥梁,支持在Jupyter环境中交互式地操作、分析和可视化GEE数据,极大地简化了地理空间数据的交互式分析与可视化过程。

本文将详细介绍 geemap 的安装使用、核心功能及典型应用案例,旨在帮助地理空间领域的专业人士快速上手并掌握这一工具。

基本情况介绍#

geemap 是由美国田纳西大学教授吴秋生博士开发并维护的一个开源Python包,旨在简化Google Earth Engine Python API使用流程。该软件包专为与Google Earth Engine进行交互式地图绘制而设计,用户能够像使用本地GIS软件一样,在熟悉的Python环境(尤其是 Jupyter Notebook 和 JupyterLab)中,通过简单的代码调用,实现复杂的地理空间数据处理和交互式地图可视化。

自2020年首次发布以来,geemap迅速在地理空间社区中获得了广泛的认可和应用。其GitHub仓库
(https://github.com/giswqs/geemap))已获得超过1000个星标,并被OSGeo(开源地理空间基金会)等权威机构推荐。

主要特点:

  • • 低代码/无代码交互: geemap 提供了丰富的图形用户界面(GUI)工具,允许用户通过点击、绘制等方式进行地图交互、区域选择、图层管理等操作,大大降低了GEE的使用门槛。
  • • **与Python生态无缝集成:**可以轻松地将GEE的数据对象(如 ee.Imageee.FeatureCollection)与 NumPy, Pandas, Geopandas, Rasterio, Xarray 等常用 Python 库结合使用,便于进行更深入的数据分析和处理。
  • • **增强的可视化能力:**基于 ipyleaflet 和 folium,提供了比GEE Code Editor更灵活、更丰富的地图可视化选项,支持多种底图切换、动态图层控制、颜色条(Colorbar)添加、分屏对比等。
  • • **简化数据转换与导出:**提供了便捷的函数,用于将 GEE 数据导出为常见的地理空间数据格式(如 GeoTIFF, Shapefile, GeoJSON),或将本地数据上传至GEE Assets。
  • • **活跃的社区与文档:**拥有详细的官方文档、丰富的示例教程和活跃的社区支持。

安装与配置#

geemap的安装相对简单,支持通过pip和conda两种主流的Python包管理器进行安装。在安装之前,用户需要确保已经注册并激活了Google Earth Engine账户,并安装了Python 3.8或更高版本。

使用pip安装:

pip install geemap

使用 conda/mamba:
推荐使用 mamba 以获得更快的安装速度。

conda create -n gee python=3.9 # 建议创建一个独立的环境
conda activate gee
conda install -c conda-forge mamba
mamba install -c conda-forge geemap

GEE认证:
geemap 依赖于 Google Earth Engine Python API (earthengine-api)。首次使用 GEE Python API 前,需要进行身份验证。在Python环境或终端运行以下命令,并按照提示完成浏览器认证流程:

import ee
ee.Authenticate() # 会引导至浏览器进行谷歌账号授权
ee.Initialize()   # 初始化 GEE Python API

或者在终端执行:

earthengine authenticate

根据提示输入Google账号,进行授权,然后将token字符串复制到Python环境或终端中即可完成认证。

完成认证后,geemap就可以正常调用GEE的服务了。

此外,用户可能需要配置网络代理以访问GEE服务,特别是在网络受限的环境中。geemap提供了set_proxy函数来设置代理端口。

使用方法#

在 Jupyter Notebook 或 JupyterLab 中使用 geemap 的基本流程如下:

# 1. 导入库
import ee
import geemap
# 2. 初始化 GEE (如果尚未完成认证,请先执行 ee.Authenticate())
try:
    ee.Initialize()
    print("Google Earth Engine 已成功初始化。")
except Exception as e:
    print(f"GEE 初始化失败: {e}")
    print("请确保已运行 'ee.Authenticate()' 并授权。")
    # 如果需要,可以在这里重新尝试 ee.Authenticate() 和 ee.Initialize()
# 3. 创建交互式地图实例
# center: 地图中心点 [纬度, 经度]
# zoom: 缩放级别
Map = geemap.Map(center=[40, -100], zoom=4)
# 4. 添加 GEE 数据图层
# 示例:添加 SRTM 数字高程模型 (DEM)
dem = ee.Image('USGS/SRTMGL1_003')
vis_params_dem = {
    'min': 0,
    'max': 4000,
    'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']
}
Map.addLayer(dem, vis_params_dem, 'SRTM DEM')
# 示例:添加 Landsat 8 影像 (取一景,计算 NDVI)
l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_SR') \
    .filterBounds(ee.Geometry.Point(-122.26, 37.77)) \
    .filterDate('2021-01-01', '2021-12-31') \
    .sort('CLOUD_COVER') \
    .first()
vis_params_l8 = {'bands': ['SR_B4', 'SR_B3', 'SR_B2'], 'min': 0, 'max': 3000}
Map.addLayer(l8, vis_params_l8, 'Landsat 8 True Color')
ndvi = l8.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI')
vis_params_ndvi = {'min': 0, 'max': 1, 'palette': ['blue', 'white', 'green']}
Map.addLayer(ndvi, vis_params_ndvi, 'NDVI')
# 5. 添加图层控制器 (可选,方便切换图层和调整透明度)
Map.addLayerControl()
# 6. 显示地图
Map # 在 Jupyter 环境中,这会自动渲染地图

上述代码展示了导入库、初始化GEE、创建地图、添加不同类型的GEE数据(高程、卫星影像、NDVI计算)并设置可视化参数、添加图层管理控件的基本流程。通过以上步骤,用户可以在Jupyter环境中看到一个交互式地图,支持缩放、平移和图层切换等操作。

核心功能#

geemap 的功能十分丰富,以下列举一些核心功能:

1. 交互式地图

  • • 创建支持缩放、平移、多种底图(如 OpenStreetMap, Google Satellite, Terrain 等)切换的地图。
  • • 支持添加GEE数据图层 (Map.addLayer),并能方便地控制图层显隐、顺序和透明度。
  • • 内置绘图工具,允许用户在地图上绘制点、线、面,获取绘制图形的几何信息 (Map.user_roiMap.user_rois),常用于定义感兴趣区域 (AOI)。
  • • 支持分屏对比功能 (Map.split_map),方便比较不同时间或不同数据的地图。
  • • 集成IPyleaflet和Folium的特性,如标记(Marker)、热力图(Heatmap)、聚类(Marker Cluster)等。

2. GEE 数据处理与可视化

  • • 提供自动计算和添加颜色条的功能。
  • • 支持对影像集合进行时序分析并生成图表或GIF动图 (geemap.create_timelapse)。
  • • 提供便捷的函数进行GEE对象属性的查询和展示。

3. 数据导入/导出

  • • 支持将结果导出到Google Drive, Google Cloud Storage或本地(通过 GEE 计算后下载)。
  • • 支持导出为Shapefile, GeoJSON, KML 等格式到Google Drive或GCS。
  • • 支持将小范围的影像直接转换为NumPy数组或Xarray Dataset。

4. 用户界面组件 (Widgets)
提供一系列Jupyter Widgets,如日期选择器、下拉菜单、滑块、按钮等,可以方便地构建简单的交互式GEE应用界面,无需编写复杂的前端代码。

5. 集成分析功能
虽然核心分析能力依赖GEE本身,但 geemap 封装了许多常用分析流程,如计算多种遥感指数(NDVI, EVI, NDWI 等)、执行监督/非监督分类后的结果可视化、进行简单的像元统计等。

使用示例#

1. 创建分割地图进行数据对比

2. 绘制交互式图表

3. 创建选定区域的时间序列变化动图

4. 使用时间轴可视化影像数据

5. 加载本地栅格数据

6. 三维地形数据可视化

7. 计算每个网格的平均温度

8. 使用Landsat和sentinel-1影像可视化分析洪水灾害情况

9. 可视化全球土地覆盖数据集

10. 结合Leafmap和Mapbox进行三维数据可视化

geemap 可广泛应用于各种地理空间分析场景:

  • • **土地覆盖/利用变化监测:**利用Landsat, Sentinel 等卫星影像集合,结合 geemap 的时序分析和可视化功能,快速查看区域地表覆盖随时间的变化情况。

  • • **植被指数(如 NDVI)时序分析:**绘制 AOI,提取该区域 NDVI 的时间序列,并通过 geemap 集成的绘图库(如 Matplotlib)生成变化曲线图。

  • • **水体资源监测:**使用 NDWI 等水体指数,结合 JRC Global Surface Water 等数据集,通过 geemap 可视化地表水体的范围变化。

  • • **灾害应急响应 (如洪水、火灾):**快速加载灾前灾后影像,利用分屏对比功能直观评估灾害影响范围。

  • • 城市热岛效应分析: 加载热红外波段数据,计算地表温度,并进行可视化展示。

  • • **农业估产与长势监测:**结合作物分布图和多光谱影像,分析作物长势,评估产量。

  • • 教学与快速原型开发: geemap 的易用性使其成为地理空间分析教学的理想工具,同时也能帮助研究人员快速验证想法、开发应用原型。

  • 教程与示例资源#

    • **官方教程集合:**geemap项目的GitHub仓库提供了丰富的教程,包括视频教程、GIF动画和Jupyter notebook示例,涵盖了从基础操作到高级应用的各个方面。每个示例都提供了视频、动画和可执行代码三种形式,方便用户按照自己的需求学习。• **geemap官方网站教程:**提供了系统化的教程,包括如何使用Earth Engine进行地图可视化、数据分析、时间序列处理等。内容包括从Earth Engine JavaScript代码转换到Python、添加动画文本到GIF图像、创建Landsat时间序列动画等。• **Python Earth Engine示例集:**一个包含300多个使用Earth Engine和geemap Python包的示例仓库,这些示例涵盖了NDVI符号化、NDWI符号化、Landsat符号化、湿地符号化、属性着色和随机颜色可视化等多种应用。

References#

扫描添加作者微信,获取更多资源

本公众号相关内容推荐#

geemap:一个支持交互式地理空间分析与可视化的Python包
https://blog.scidatalab.net/posts/geemap-一个支持交互式地理空间分析与可视化的python包/
作者
Echo
发布于
2025-04-03
许可协议
CC BY-NC-SA 4.0