从零到一:手把手搭建Python GEE与geemap本地开发环境

张开发
2026/4/13 20:09:57 15 分钟阅读

分享文章

从零到一:手把手搭建Python GEE与geemap本地开发环境
1. 为什么需要搭建Python GEE开发环境Google Earth EngineGEE是目前最强大的地理空间分析平台之一但很多新手在使用时会遇到一个尴尬的问题官方提供的在线编辑器虽然方便但功能受限调试困难而且网络延迟严重影响工作效率。我自己刚开始用GEE时就经常遇到代码写到一半突然断连的情况那种感觉就像在悬崖边跳舞——随时可能掉下去。本地开发环境可以完美解决这些问题。通过Python环境安装geemap一个基于GEE的Python库你不仅能获得完整的代码提示和调试功能还能结合Jupyter Notebook实现交互式开发。实测下来本地环境的代码执行速度比在线编辑器快3-5倍特别是处理大批量数据时优势更明显。这个教程特别适合三类人一是遥感专业的在校学生要做毕业设计二是科研人员需要处理长期地理数据三是GIS工程师想把GEE集成到现有工作流。接下来我会用最直白的语言带你一步步避开所有我踩过的坑。2. 环境准备Anaconda安装与配置2.1 下载Anaconda的正确姿势很多教程一上来就让你去官网下载Anaconda但国内用户直接访问速度可能只有几十KB/s。我推荐使用清华镜像站下载速度能轻松跑满带宽。具体操作打开浏览器访问清华开源镜像站搜索Anaconda找到最新版本目前是2023.03版根据你的系统选择对应安装包Windows选.exeMac选.pkg这里有个细节要注意如果你的电脑是M1/M2芯片的Mac务必选择标注Apple Silicon的版本否则后期运行会出各种奇怪问题。我去年帮同事排查了半天性能问题最后发现就是装错了版本。2.2 安装过程中的关键选项双击安装包后有几个选项需要特别注意安装路径建议保持默认不要装在中文字符路径下高级选项一定要勾选Add Anaconda to my PATH environment variable注册为默认Python这个看需求如果你没有其他Python环境可以勾选安装完成后打开终端Mac/Linux或Anaconda PromptWindows输入以下命令测试是否成功conda --version如果显示类似conda 23.3.1的版本号说明基础环境已经就绪。接下来我们要解决国内用户最头疼的包下载速度问题。2.3 配置国内镜像源默认的conda源在国外下载速度堪比蜗牛。通过以下命令一键配置清华源conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yes配置完成后建议运行conda clean -i清除索引缓存。我曾经遇到过镜像源配置不生效的情况就是因为没清理旧缓存。3. 创建专属虚拟环境3.1 为什么需要虚拟环境Python的包依赖就像乐高积木不同项目可能需要不同版本的组件。我见过最夸张的情况是一个机器学习项目需要numpy 1.19而另一个地理项目需要numpy 1.23直接安装会导致各种冲突。创建虚拟环境相当于给你的项目一个独立的沙箱。具体到GEE开发我建议专门创建一个名为gee的环境conda create -n gee python3.9这里选择Python 3.9是因为目前geemap对这个版本支持最稳定。3.10版本可能会有一些依赖冲突这个坑我去年踩过三次。3.2 激活与管理环境创建完成后使用以下命令激活环境conda activate gee你会看到命令行提示符前面多了(gee)字样表示已经进入虚拟环境。这里有个实用技巧如果你用的是Windows系统建议把Anaconda Prompt固定到任务栏每次都以管理员身份运行可以避免很多权限问题。要查看环境中已安装的包可以运行conda list新创建的环境非常干净只有几个基础包。这种纯净状态正是我们需要的接下来就可以安装GEE相关工具了。4. 安装geemap与关键依赖4.1 为什么选择geemapgeemap是吴秋生博士开发的GEE Python接口增强工具它最大的优势是内置了官方ee库无需单独安装提供交互式地图功能集成大量实用工具如时间序列分析、影像分类等安装geemap前我们先装一个更快的包管理工具mambaconda install -c conda-forge mambamamba的语法和conda完全一样但依赖解析速度快10倍不止。特别是在处理复杂依赖时conda可能要卡几分钟而mamba基本秒解。4.2 一键安装核心组件接下来用mamba安装geemap及其黄金搭档pygismamba install -c conda-forge geemap pygis这个命令会自动安装所有依赖包括earthengine-apiGEE官方Python库ipyleaflet交互式地图folium可视化库geopandas地理数据处理安装过程可能会持续5-10分钟取决于你的网速。如果卡在某个环节不动可以尝试按回车键唤醒进度显示。4.3 常见安装问题排查我遇到过最多的问题就是依赖冲突典型报错是UnsatisfiableError。这时候可以尝试先更新conda和mambaconda update conda conda update mamba指定稍旧版本的geemapmamba install -c conda-forge geemap0.18.0如果还是不行可以尝试新建一个干净环境从头再来。记住一个原则解决依赖冲突的时间往往比重装环境更长。5. 环境验证与基础使用5.1 测试GEE认证安装完成后在终端输入以下命令启动Jupyter Notebookjupyter notebook新建一个Python 3笔记本运行以下代码测试环境import ee import geemap Map geemap.Map() Map第一次运行时会提示你进行GEE认证。按照提示的链接访问用你的Google账号登录并获取验证码即可。这里有个技巧如果你在认证页面卡住可以尝试更换浏览器我实测Edge比Chrome成功率更高。5.2 解决网络连接问题由于GEE服务在国内访问不稳定建议在代码开头添加以下设置import geemap geemap.set_proxy(portyour_port_number)这个设置能显著提升API调用稳定性。我在北京、上海、广州三地测试过开启代理后请求成功率从40%提升到95%以上。5.3 你的第一个GEE程序让我们用5行代码实现一个卫星影像加载Map geemap.Map(center[39.9, 116.3], zoom11) # 北京坐标 image ee.Image(LANDSAT/LC08/C01/T1_SR/LC08_123032_20190508) vis_params {bands: [B4, B3, B2], min: 0, max: 3000} Map.addLayer(image, vis_params, Landsat 8) Map这段代码会显示2019年5月8日的北京Landsat 8影像。如果能看到彩色图像恭喜你的环境已经完全配置成功6. 进阶配置与优化6.1 提升Jupyter使用体验默认的Jupyter界面功能有限我推荐安装以下扩展pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user安装后重启Jupyter你会获得代码自动补全、目录导航等实用功能。特别是Table of Contents扩展对于长文档编写特别有用。6.2 配置VS Code开发环境如果你更喜欢用VS Code可以这样配置安装Python和Jupyter插件选择gee虚拟环境的Python解释器新建.ipynb文件即可开始编码VS Code的优势在于更好的代码提示和调试功能。比如你可以设置断点查看GEE返回的数据结构这在排查复杂错误时非常有用。6.3 环境备份与迁移项目完成后你可能需要把环境迁移到其他电脑。conda提供了方便的导出功能conda env export environment.yml在新电脑上只需运行conda env create -f environment.yml就能完美复现整个环境。我建议每个重要项目都保存一个environment.yml文件这比写文档记录依赖靠谱多了。7. 实际项目中的应用技巧7.1 大数据集处理策略当处理全球尺度或长时间序列数据时直接下载往往不现实。这时候可以使用GEE的reduceRegion等空间聚合功能分块处理并保存中间结果到Google Drive使用ee.batch.Export接口异步导出我曾经处理过10年的每日气象数据采用分年份并行导出的方法效率提升了8倍。7.2 常用代码片段分享这里分享几个我积累的实用代码片段快速可视化NDVIdef addNDVI(image): ndvi image.normalizedDifference([B5, B4]).rename(NDVI) return image.addBands(ndvi) collection ee.ImageCollection(LANDSAT/LC08/C01/T1_SR) \ .filterDate(2020-01-01, 2020-12-31) \ .map(addNDVI) ndvi_layer collection.mean().select(NDVI) Map.addLayer(ndvi_layer, {min: -1, max: 1, palette: [red, yellow, green]}, NDVI)批量导出到本地task ee.batch.Export.image.toDrive( imagendvi_layer, descriptionNDVI_Export, folderGEE_Exports, fileNamePrefixndvi_2020, scale30, regionyour_geometry ) task.start()7.3 性能调优经验GEE脚本的性能瓶颈通常出现在过多的客户端运算用ee.List/ee.Dictionary替代Python原生类型未优化的空间查询先filterBounds再filterDate过高的导出分辨率根据需求合理设置scale参数有个简单的判断原则如果你的代码中有大量for循环很可能需要重构为GEE的map/reduce范式。

更多文章