Google Earth Engine(GEE)-谷歌地球引擎的大致Python入门
一个有趣的灵魂W
谷歌地球引擎,在RSE(Remote Sensing of Environment)的热门版上有一篇文章有大致的介绍。
摘要的翻译:
01
Google Earth Engine是一个基于云的行星级地理空间分析平台,它使Google的巨大计算能力能够应对各种高影响的社会问题,包括森林砍伐、干旱、灾难、疾病、粮食安全、水资源管理、气候监测和环境保护。作为一个集成平台,它在这一领域是独一无二的,它不仅为传统的遥感科学家提供了能力,也为更广泛的受众提供了能力,这些受众缺乏利用传统超级计算机或大规模商品云计算资源所需的技术能力。
简而言之,这个平台主要是为遥感服务。
02
Earth Engine由一个支持多PB分析的数据目录和一个高性能、本质上并行的计算服务组成。它通过一个可访问互联网的应用程序编程接口(API)和一个相关的基于web的交互式开发环境(IDE)进行访问和控制,该环境支持快速原型和结果可视化。
数据目录存放了大量可公开获得的地理空间数据集,包括各种卫星和航空成像系统在光学和非光学波长、环境变量、天气和气候预报和后播、土地覆盖、地形和社会经济数据集方面的观测。所有这些数据都经过预处理,形成一个既可使用又可保留信息的表单,允许高效访问,并消除了与数据管理相关的许多障碍。
用户可以使用Earth Engine API提供的操作员库访问和分析公共目录中的数据以及自己的私有数据。这些运算符在一个大型并行处理系统中实现,该系统自动细分和分配计算,提供高吞吐量分析功能。用户可以通过瘦客户机库访问API,也可以通过构建在该客户机库之上的基于web的交互式开发环境访问API
以上部分都是大致的介绍。接下来要开始实用分析了:
0、GEE可以使用JavaScript和Python两种语言扩展----这是大前提。
1、如果你要入门,首先你需要有一个谷歌邮箱账号。近期的新邮箱申请似乎对中国手机号不太友好,总是报手机号不对的问题,我在网上搜索过使用中国香港手机号之后再转国内的手机号的方法(如果各位有新的办法,可以@我一下)。似乎也不行。。。所以各位,请出万能淘宝吧。我是翻出了8年前申请的邮箱账号,才顺利入门了GEE:
2、申请GEE:
03
这个步骤比较简单,使用谷歌邮箱,填写相关信息,下一步下一步(记得会有个人机验证的验证码!)
3、带劲的来了:
04
这部分需要重点介绍一下,我一开始以为中间的编辑器可以编译Js和Python两种语言,结果我发现我错了,它只是JS的编译器。需要编译Python的话又要下一步了。
4、GEE的两种Python编译手段(线上和线下):
05
如果你家的网络好,可以访问国外网站,我还是建议安一个线下的,但是由于我这无法访问国外网站,还是乖乖运行Google Colab进行线上编译吧,所以我不介绍线下的安装方法了,简而言之就是conda install。
哈皮了,现在是线上阶段,线上也不是你想玩就能玩的,打开谷歌网盘(谷歌硬盘)。
直接选择箭头,如果你没有这个,就去关联更多应用中搜索google colaboratory,点击安装就能写python啦。
界面是这样(新建的是ipynb):
06
安装第三方库使用的是pip方法,在pip之前输入!就好了。
import ee
print(ee.__version__)
!pip install jieba
!pip install earthengine-api
!earthengine authenticate
ee.Authenticate()
ee.Initialize()
需要注意的是,使用这个方法运行GEE是需要Gmail授权的,比较麻烦一些:
一步步的依照链接执行。
点开链接后,有授权的操作:eg
授权结束,就能正常运行了。你可以运行官方的线上测试代码:
import matplotlib.pyplot as plt
# Fetch a Landsat image.
img = ee.Image('LANDSAT/LT05/C01/T1_SR/LT05_034033_20000913')
# Select Red and NIR bands, scale them, and sample 500 points.
samp_fc = img.select(['B3','B4']).divide(10000).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()
结果:
07
这个结果是可以本地存储的,和我们线下是一样的。你可以存为一个300dpi的jpg图,存储的位置是谷歌硬盘中,然后下载至你的电脑中。
(通常是这里,你也可以更改存储路径)
结语:
09
谷歌大法确实好!
想象空间瞬间大了很多,希望后续我还有动力继续写这方面的Python教程~
一个字:棒!
往期
Python下的subprocess.call()使用和注意事项
微信号:一个有趣的灵魂W
关注我们,了解更多
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 限流算法简介及Guava RateLimiter令牌桶限流介绍
- K8S的名称空间创建&&版本的升级、回滚操作
- SAP Cloud for Customer CLR(Code List Restriction)的一种高级用法
- SAP WebClient UI One Hit Navigation的实现方法
- 【打包构建】Mac下使用expect实现执行sudo命令时自动输入密码
- ASP.NET Core 奇淫技巧之SPA部署
- SAP Cloud for Customer Rule Editor的使用方法和底层工作原理
- (数据科学学习手札94)QGIS+Conda+jupyter玩转Python GIS
- 72-STM32+ESP8266+AIR202基本控制篇-移植使用-移植Android的MQTT包到自己的工程项目
- 用上Latex实现编辑伪代码
- TensorFlow交叉熵函数(cross_entropy)·理解
- 第05期:Prometheus 数据查询(一)
- 技术分享 | MySQL 复制那点事 - Seconds_behind_Master 参数调查笔记
- 线程有多少种状态?Runnable 一定在执行任务吗?
- swift 中类(class)和结构体(struct)区别