GEE

9/3/2020

Google Earth Engine(简称GEE)是地球科学数据处理和分析的云平台。在该平台上存储了丰富的遥感数据资源,并提供了相应处理API来支持数据处理和分析。可以把GEE当成ENVI等传统遥感处理工具的在线版本,且本身具有数据源,能够快速和批量处理大尺度遥感数据。

GEE提供两种方式来辅助用户使用该平台。第一是图形用户界面,该界面面向无编码经验,但具有空间处理和分析能力的用户,通过GEE提供的各种功能来辅助完成对应的需求。第二种是面向编码界面,该界面需要用户具有一定的编码能力,GEE提供在线的JavaScript API来支持用户完成对应的需求。除此之外,还有Python API。

GEE官网 (opens new window)

GEE官方帮助文档 (opens new window)

# GEE图形用户界面

GEE图形用户界面 (opens new window)

GEE面向编码界面

视频资料 (opens new window)

# GEE面向编码界面

GEE面向编码界面 (opens new window)

GEE图形用户界面

各部分说明如下:

  • Scripts(脚本文件):包括用户自定义的脚本文件、官方示例脚本文件、第三方引入脚本文件等
  • Docs(帮助文档):对GEE内所有数据类型以及其相应的功能介绍和说明。
  • Assets(资源文件):包括用户上传矢量数据、影像数据等。
  • 资源搜索框:主要用于关键字搜索对应资源,并进行引入。
  • 编码区域:编写代码的区域。
  • 地图视图区域:影像呈现在地图上的区域。
  • Save:保存脚本文件。
  • Run:运行脚本文件。
  • Inspector:用于查看地图视图区域内加载影像对应位置的像元信息。
  • Console:代码输出控制台。
  • Tasks:任务管理控制台,用于监控用户上传和导出数据的状态。

视频资料 (opens new window)

# GEE数据类型

GEE的数据类型可分为三大类,第一是基本数据类型,包括字符串、数据、字典、列表和矢量;第二是空间数据类型,包括几何体、要素和要素集合;第三是影像数据类型,包括影像和影像集合。

# 基本数据类型

# String(字符串)

# 创建

ee.String()初始化字符串

var str = ee.String('I am String');
print(str)
1
2
# 其他
  • str.replace():字符串替换
  • str.length():字符串长度
  • str.slice():字符串切片
  • str.split():字符串分割
  • str.match():字符串匹配

# Number(数字)

# 创建

ee.Number()初始化数字

var num = ee.Numer(12345678);
print(num)
1
2
# 数字类型转换

Number类型提供一些列方法,来进行数字类型转换。

  • num.uint8()/toInt8():转为无符号8位整型
  • num.uint16()/toInt16():转为无符号16位整型
  • num.uint32()/toInt32():转为无符号32位整型
  • num.uint64()/toInt64():转为无符号64位整型
  • num.float()/toFloat():转为浮点型
  • num.double()/toDouble():转为双精度浮点型
# 其他
  • 运算
    • num.round():四舍五入
    • num.ceil():向上取整
    • num.sqrt():开方
    • num.exp():幂
    • num.log():对数
    • num.log10():10为底数的对数
  • 比较
    • num.eq():=比较
    • num.neq:比较
    • num.gt():比较
    • num.gte:比较
    • num.lt():比较
    • num.lte:比较
    • num.and():
    • num.or():
    • num.not():

# Dictionary(字典)

字典是由键和值组成的键值对。

# 创建

ee.Dictionary()初始化字典

var dict = ee.Dictionary({
	name:'zhangsan',
	age:18,
	gender:'man',
	location:'China'
});
print(dict);
1
2
3
4
5
6
7
# 其他
  • dict.keys():获取字典所有key
  • dict.values():获取字典所有value
  • dict.get():获取字典指定key的value
  • dict.contains():判断字典包含指定的键
  • dict.size():字典键的个数
  • dict.set():根据相应键来修改字典相应的值
  • dict.combine():字典合并,将两个字典合并

# List(列表)

# 创建
  • ee.List()初始化列表

    var myList = ee.List([1,2,3,'A','B','C',['China','Home']]);
    print(myList);
    
    1
    2
  • ee.List.repeat()以重复某个值来初始化列表

    var myList = ee.List.repeat('Snake8859',5); //'Snake8859'的值重复5次
    print(myList); //['Snake8859','Snake8859','Snake8859','Snake8859','Snake8859']
    
    1
    2
  • ee.List.sequence(start,end,step,length)按某种序列规律初始化列表

    参数说明:

    • start:起始数字
    • end:结束数字
    • step:步长
    • length:长度
    var myList1 = ee.List.sequence(0,9,1,null); //从0到9,步长为1,长度不设置则到9为止
    var myList2 = ee.List.sequence(0,9,null,4); //从0到9,步长不设置,长度为4,则根据长度设置步长
    print(mylist1); //[0,1,2,3,4,5,6,7,8,9]
    print(mylist2); //[0,3,6,9]
    
    1
    2
    3
    4
# 其他
  • 列表查询

    • List.length()/List.size():查询列表长度
    • List.get(index):查询index位置的列表元素
    • List.indexOf(value):查询列表内值为value的第一个元素的索引
    • List.indexOfSublist(list):查询列表内匹配到参数子列表的第一个元素的索引
    • List.lastIndexOfSubList(list):倒叙查询列表内匹配到参数子列表的第一个元素的索引
    • List.frequency(value):查询列表内某个值重复次数
  • 列表编辑

    • List.set(index,value):根据相应索引修改对应位置的值
    • List.replace(oldValue,newValue):将列表里第一个oldValue匹配的值用newValue替换
    • List.replaceAll(oldValue,newValue):将列表里所有oldValue匹配的值用newValue替换
    • List.add(value):在列表末尾加入添加一个元素
    • List.insert(index,value):在列表指定位置插入一个元素
    • List.zip():将两个列表对应位置的内容组合,以长度较短为准
  • 列表删除

    • List.remove(value):删除值为value的第一个元素
    • List.removeAll(value):删除值为value的所有元素
  • 列表位置操作

    • List.reverse():将列表元素反转
    • List.rotate(value):将以value值为开头的之后的元素排到最前面
    • List.sort():对列表进行排序
    • List.swap(index1,index2):将列表里index1和index2的位置的元素对调
  • 列表的flatten

    • List.flatten():将列表元素以一维方式展开
  • 列表比较

    • List.equals():判断两个List是否相等,顺序和值都要相等才会相等
    • List.contains(value):是否包含value的值
  • 列表遍历

    由于GEE不提倡for循环遍历,具有原因可详见传送门 (opens new window)

    • List.map(function):对List的每一个项进行遍历运算,参数为一个函数,函数的参数为当前项。

      var serverList = ee.List.sequence(0, 7);
      serverList = serverList.map(function(n) {
        return ee.Number(n).add(1);
      });
      print(serverList);
      
      1
      2
      3
      4
      5
    • List.iterate(function):对List的迭代,参数为一个函数,函数的参数为累积项和当前项。【待继续研究该用法】

      var myList = ee.List.sequence(1,100,1);
      var result = myList.iterate(function(item1,item2){
      	return ee.Number(item1).add(item2);
      })
      print(result); //5050
      
      1
      2
      3
      4
      5

# Array(矩阵)

与List(列表)类似,但是具有方向。

# 创建
  • ee.Array()初始化矩阵

    var arr1 = ee.Array([[1],[2],[3]]); //3*1
    var arr2 = ee.Array([[1,2,3]]) //1*3
    print(arr1);
    print(arr2);
    
    1
    2
    3
    4
  • ee.Array.identity()初始化对角线为1的方阵

    var arr = ee.Array.identity(5);
    print(arr)
    
    1
    2
  • ee.Array.repeat(direction,time)矩阵按某个方向重复

    参数说明:

    • direction:1代表横向(x方向),0代表纵向(y方向)
    • time:重复次数
    var arr1 = ee.Array([
    	[1,2,3],
    	[4,5,6]
    ]); // 2*3
    var arr2 = arr1.repeat(1,2); //2*6
    print(arr2);
    
    1
    2
    3
    4
    5
    6
# 其他
  • 矩阵修改

    • 数据类型修改

    • Array.uint8():矩阵内元素类型转为无符号8位整型

      • Array.uint16():矩阵内元素类型转为无符号16位整型

      • Array.uint32():矩阵内元素类型转为无符号32位整型

      • Array.uint64():矩阵内元素类型转为无符号64位整型

      • Array.long():矩阵内元素类型转为64位长整型

      • Array.float():矩阵内元素类型转为浮点型

      • Array.double():矩阵内元素类型转为双精度浮点型

    • Array.mask():以掩膜矩阵提取相应特别位置的矩阵

      var arr1 = ee.Array([[1,1],[2,2],[3,3],[4,4]]); //4*2
      var masked = ee.Array([[0],[1],[0],[0]]); //4*1
      var arr3 = arr1.mask(masked);
      print(arr3); //[[2,2]] 1*2
      
      1
      2
      3
      4
  • 矩阵数学操作

    • 比较
      • Array.eq():=比较,返回也是结果矩阵,对应位置值相等的地方为1,不相等的地方为0
      • Array.neq:比较
      • Array.gt():比较
      • Array.gte:比较
      • Array.lt():比较
      • Array.lte:比较
      • Array.and():且运算
      • Array.or():或运算
    • 运算
      • Array.add():对应位置的值相加
      • Array.subtract():对应位置的值相减
      • Array.multiply():对应位置的值相乘
      • Array.divide():对应位置的值相除
      • Array.max():求最大值
      • Array.min():求最小值
      • Array.mod():取模
      • Array.pow():幂
      • Array.sin():正弦
      • Array.cos():余弦
      • Array.tan():正切
      • Array.round():四舍五入
      • Array.ceil():向上取整
      • Array.sqrt():开方
      • Array.exp():幂
      • Array.log():对数
      • Array.log10():10为底数的对数
    • Array.transpose():矩阵转置

视频资料1 (opens new window)视频资料2 (opens new window)

# 空间数据类型

# Geometry

空间几何体,主要以点、线和面三种形式。

# 创建
    • ee.Geometry.Point() 初始化单点几何体
    • ee.Geometry.MultiPoint()初始化多点几何体
  • 线

    • ee.Geometry.LineString()初始化单线几何体
    • ee.Geometry.MultiLineString()初始化多线几何体
    • ee.Geometry.Polygon()初始化单面几何体
    • ee.Geometry.MultiPolygon()初始化多面几何体
    • ee.Geometry.Rectangle()初始化矩形几何体
# 其他
  • 几何属性查询
    • Geometry.centroid():获取几何体中心点
    • Geometry.convexHull():获取几何体最小外包几何体
    • Geometry.bounds():获取几何体最小外包矩形
    • Geometry.simpify():获取几何体简化边界
    • Geometry.area():获取几何体面积
    • Geometry.perimeter():获取几何体周长
  • 几何操作
    • Geometry.transform():投影变化
    • Geometry.buffer():缓冲区提取
    • Geometry.union():几何求并集
    • Geometry.intersection():几何体求交集
    • Geometry.Difference():几何体求补集
    • Geometry.symmertricDifference():几何体补集求反
    • Geometry.geometries():多要素几何体拆分为单几何体列表
    • Geometry.distance():几何距离计算
  • 类型转换
    • Geometry.toGeoJSON():转为GeoJSON

# Feature

包含空间信息和属性信息的要素。

# 创建
  • ee.Feature(geometry,property)传入空间信息和属性信息初始化要素
  • 地图视图内通过绘制工具,绘制要素。
# 其他
  • 要素几何操作

    • Feature.geometry():获取要素几何体
    • Feature.centroid():获取几何体中心点
    • Feature.convexHull():获取几何体最小外包几何体
    • Feature.bounds():获取几何体最小外包矩形
    • Feature.simplify():获取几何体简化外包形状
    • Feature.Area()/Feature.Perimeter():获取几何体面积和周长
    • Feature.transform():投影变化
    • Feature.buffer():缓冲区提取
    • Feature.union():要素几何并集
    • Feature.intersection():要素几何交集
    • Feature.difference():要素几何补集
    • Feature.symmetricDifference():要素几何补集求反
  • 要素属性操作

  • Feature.get():根据属性名查询属性值

    • Feature.select():根据属性查询相应要素
    • Feature.set():单个属性修改
    • Feature.setMulti():多个属性同时修改

# FeatureCollection

要素集合,即多个要素的总和。

# 创建
  • GEE自带:通过资源搜索框搜索获得
  • 用户上传:通过本地打包zip的shp文件上传
  • ee.FeatureCollection()初始化要素集合
  • ee.FeatureCollection.randomPoints()在选定范围内,生成指定个数的随机点
# 其他
  • 要素集合筛选

    • FeatureCollection.filterMetadata():属性筛选
    • FeatureCollection.filterDate():时间筛选
    • FeatureCollection.filterBounds():空间筛选
    • FeatureCollection.limit():排序条件和限制条数筛选
  • FeatureCollection.select():根据属性名查询相应要素集合

  • FeatureCollection.distinct():要素集合去重

  • FeatureCollection.union():要素集合内要素合并

  • FeatureCollection.merge():两个不同的要素集合合并

  • FeatureCollection.remap():要素集合属性重分类

  • FeatureCollection.sort():对要素集合某个属性排序

  • FeatureCollection.first():取要素集合内第一个要素

  • FeatureCollection.toList():要素集合转为List列表

  • 要素集合空间操作

    • FeatureCollection.geometry():获得要素集合的几何体集合
  • 要素集合属性操作

    • FeatureCollection.set():属性修改
  • 要素集合属性表统计

    FeatureCollection.aggregate_XXX()系列函数用于进行属性表统计

    • FeatureCollection.aggregate_first():取属性表某个字段的第一个属性值
    • FeatureCollection.aggregate_array():将属性表某个字段所有值转为Array
    • FeatureCollection.aggregate_stats():将属性表某个字段进行数学统计
    • FeatureCollection.aggregate_histogram():将属性表某个字段进行频率统计
  • 要素集合遍历

    FeatureCollection.map():要素集合每个要素进行遍历

视频资料 (opens new window)

# 影像数据类型

# Image

# 创建
  • GEE自带:通过资源搜索框搜索获得
  • 用户上传:导出Tiff格式的影像文件,导入到平台
  • ee.Image()/ee.Image.Constant()初始化无空间属性的弹性影像
  • ee.Image.pixelLonLat()初始化每个仅有经纬度信息的弹性影像
# 其他
  • 影像空间操作

    • Image.mask():掩膜提取,栅格掩膜提取栅格,对掩膜之外的原始数据保留
    • Image.clip():裁剪提取,矢量裁剪栅格,对矢量之外的原始数据删除
    • Image.reproject():栅格影像重投影
  • 影像波段操作

    • Image.select():波段选择

    • Image.slice():波段切片选择

    • Image.addBands():添加波段信息

    • Image.toUint8()/toUint16()/toUint32()/toUint64/toInt8()/toInt16()/toInt32()/toInt64()/toLong()/toFloat()/toDouble():单波段数据类型转换

    • Image.cast():多波段数据类型转换

    • Image.remap():重分类

    • Image.where():波段像元值筛选和过滤,例如大于某个像元值的保留,小于某个像元值设置为0

    • Image.clamp():波段像元值区间筛选,例如在某个像元值到某个像元值区间内保留,其他设置为0

    • Image.uintScale():波段区间值映射

    • 波段条件运算

      • Image.eq():=提取
      • Image.neq():提取
      • Image.gt():提取
      • Image.gte():提取
      • Image.lt():提取
      • Image.lte():提取

      将符合条件的像元进行提取,类似于where()和clamp()

      • Image.and():且提取
      • Image.or():或提取
    • 波段基本运算

      • Image.add():波段相加
      • Image.subtract():波段相减
      • Image.multiply():波段相乘
      • Image.divide():波段相处
      • Image.expression():波段表达式运算
    • 波段其他运算

      • Image.abs():绝对值
      • Image.round():四舍五入
      • Image.floor():向下取整
      • Image.ceil():向上取整
      • Image.sqrt():开平方
      • Image.exp():幂运算
      • Image.log():对数运算
      • Image.log10():以10为底数的对数运算
      • Image.sin():正弦
      • Image.cos():余弦
      • Image.tan():正切
  • 影像属性修改

    • Image.set():单个属性修改
    • Image.setMulti():多个属性修改
  • 影像高级操作【不熟悉】

    • 显示
      • Image.rgbtohsv():rgb表达转hsv表达
      • Image.hsvtorgb():hsv表达转rgb表达
    • 地形
      • ee.Terrain.products():DEM生成地形表面产品,获得地形的阴影、坡度和坡向。
      • ee.Terrain.hillshadow():DEM生成阴影图像
      • ee.Terrain.fillMinima():DEM填洼
    • 纹理
      • Image.entropy():影像熵值操作
      • Image.zeroCorssing():影像值变化走势操作
      • Image.glcmTexture():影像纹理操作
      • Image.CannyEdgeDetetor():影像纹理边界提取
      • Image.distance():提取每一个像元到非零像元最短距离的影像
    • 邻域
      • Image.focal_max():在指定搜索领域内,提取领域最大值并将其值赋予整个领域
      • Image.focal_min():在指定搜索领域内,提取领域最小值并将其值赋予整个领域
      • Image.focal_median():在指定搜索领域内,提取领域中值并将其值赋予整个领域
      • Image.reduceNeighborhood():对指定搜索领域内的值,进行数值统计
    • 转换
      • Image.reduceToVectors():栅格转矢量
      • Image.toArray():栅格转矩阵
      • Image.arrayFlatten():栅格转一维矩阵
    • 统计
      • Image.reduceRegion():栅格影像区域数值统计
    • 导出
      • Export.Image.toDrive():栅格影像导出

# ImageCollection

栅格影像集合,包含多个栅格影像的总和

# 创建
  • ee.ImageCollection()通过数据集名称导入栅格数据集
  • ee.ImageCollection.load()同上
# 其他
  • 影像集合筛选

    • ImageCollection.filterMetadata():属性筛选
    • ImageCollection.filterDate():时间筛选
    • ImageCollection.filterBounds():空间筛选
    • ImageCollection.limit():条数筛选
    • ImageCollection.first():返回第一个影像
  • ImageCollection.select():影像集合波段查询

  • ImageCollection.distinct():根据属性去重

  • ImageCollection.combine():影像集合合并,最后合并为多个影像集合

  • ImageCollection.set()/setMulit():影像集合属性修改

  • ImageCollection.mosaic():影像集合合并,最后合并为1个影像集合

  • ImageCollection.and()/or():

  • 影像集合数值运算

    • ImageCollection.sum():影像集合每个影像求和,输出为一个影像
    • ImageCollection.product():
    • ImageCollection.max():影像集合每个影像求最大,输出为一个影像
    • ImageCollection.min():影像集合每个影像求最小,输出为一个影像
    • ImageCollection.mean():影像集合每个影像求平均,输出为一个影像
  • 影像集合统计

  • 影像集合转换

    • ImageCollection.toList():影像集合转为列表
    • ImageCollection.toArray():影像集合转为矩阵
  • 影像集合遍历

    • ImageCollection.map():遍历影像集合每一个影像

视频资料1 (opens new window)视频资料2 (opens new window)

Last Updated: 8/6/2023, 3:51:38 PM