GEE Python API安装配置(Jupyter)
2020-07-10 本文已影响0人
沉迷科研的憨憨
一、Earth Engine JS API vs. Python API
Earth Engine JavaScript Code Editor :
- 具有完善的说明文档及向导
- 较为容易上手(针对于初次接触GEE的同学
- 内置交互式制图功能
- 可借助API定制GEE APP web程序
- 无法安装第三方库
Earth Engine Python API:
- 缺乏相应的说明文档
- 更加简单的语法规则(对于那些不了解JS语法的同学非常友好
- 能够进行批量化处理(如批量导出影像数据)
- 可引入各类python工具库(如数学统计、绘图)
- 易于访问本地数据
- 能够引入深度学习
二、Python API配置流程
在配置GEE API之前需要先解决两个问题*(这两个部分就不在这里做详细说明,网上都有教程):
- 申请GEE平台使用权限
- 能给科学上网
- 安装配置好anaconda或miniconda(注意把默认镜像源修改至清华镜像源)
1. 首先创建conda Earth Engine API虚拟环境:
conda create --name ee
2. 然后激活conda ee的虚拟环境:
activate ee
(确保 ee 出现在命令行的开头,表明您正在ee环境中工作)
3. 然后将API安装到conda ee的虚拟环境中:
conda install earthengine-api
在官方配置文档中建议输入的命令行是" conda install -c conda-forge earthengine-api " ,这里需要进行调整,因为" -c conda-forge "参数会导致 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/pkgs/r/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge /
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
#设置搜索时显示通道地址
conda config --set show_channel_urls yes
4. 测试API是否安装在成功:
import ee
print(ee.__version__)
5. 在Jupyter中切换为conda ee的虚拟环境
在之前的虚拟环境ee下安装nb_conda包
conda install nb_conda
安装完成后执行,Name是ee虚拟环境在jupyter中显示的名字(可自定义)
python -m ipykernel install --name Name
打开Jupyter即可选择ee虚拟环境来进行后续的实验。
6. 在Jupyter中进行测试
首先在ee虚拟环境中执行下面的命令行,进行身份验证:
earthengine authenticate
在使用Earth Engine API之前,你必须执行一次身份验证。该身份验证代表你的Google帐户授权对Earth Engine的访问(这里你的科学上网工具需要开“全局代理”模式,确保cmd终端能够访问外网服务器)
然后在Jupyter中执行以下代码进行测试:
import ee
# Initialize the Earth Engine module.
ee.Initialize()
# Print metadata for a DEM dataset.
print(ee.Image('USGS/SRTMGL1_003').getInfo())