GEE
Google Earth Engine(简称GEE)是地球科学数据处理和分析的云平台。在该平台上存储了丰富的遥感数据资源,并提供了相应处理API来支持数据处理和分析。可以把GEE当成ENVI等传统遥感处理工具的在线版本,且本身具有数据源,能够快速和批量处理大尺度遥感数据。
GEE提供两种方式来辅助用户使用该平台。第一是图形用户界面,该界面面向无编码经验,但具有空间处理和分析能力的用户,通过GEE提供的各种功能来辅助完成对应的需求。第二种是面向编码界面,该界面需要用户具有一定的编码能力,GEE提供在线的JavaScript API来支持用户完成对应的需求。除此之外,还有Python API。
# GEE图形用户界面
# GEE面向编码界面
各部分说明如下:
- Scripts(脚本文件):包括用户自定义的脚本文件、官方示例脚本文件、第三方引入脚本文件等
- Docs(帮助文档):对GEE内所有数据类型以及其相应的功能介绍和说明。
- Assets(资源文件):包括用户上传矢量数据、影像数据等。
- 资源搜索框:主要用于关键字搜索对应资源,并进行引入。
- 编码区域:编写代码的区域。
- 地图视图区域:影像呈现在地图上的区域。
- Save:保存脚本文件。
- Run:运行脚本文件。
- Inspector:用于查看地图视图区域内加载影像对应位置的像元信息。
- Console:代码输出控制台。
- Tasks:任务管理控制台,用于监控用户上传和导出数据的状态。
# GEE数据类型
GEE的数据类型可分为三大类,第一是基本数据类型,包括字符串、数据、字典、列表和矢量;第二是空间数据类型,包括几何体、要素和要素集合;第三是影像数据类型,包括影像和影像集合。
# 基本数据类型
# String(字符串)
# 创建
ee.String()
初始化字符串
var str = ee.String('I am String');
print(str)
2
# 其他
- str.replace():字符串替换
- str.length():字符串长度
- str.slice():字符串切片
- str.split():字符串分割
- str.match():字符串匹配
# Number(数字)
# 创建
ee.Number()
初始化数字
var num = ee.Numer(12345678);
print(num)
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():
- num.eq():
# Dictionary(字典)
字典是由键和值组成的键值对。
# 创建
ee.Dictionary()
初始化字典
var dict = ee.Dictionary({
name:'zhangsan',
age:18,
gender:'man',
location:'China'
});
print(dict);
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
2ee.List.repeat()
以重复某个值来初始化列表var myList = ee.List.repeat('Snake8859',5); //'Snake8859'的值重复5次 print(myList); //['Snake8859','Snake8859','Snake8859','Snake8859','Snake8859']
1
2ee.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
5List.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
4ee.Array.identity()
初始化对角线为1的方阵var arr = ee.Array.identity(5); print(arr)
1
2ee.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.eq():
- 运算
- 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():要素集合每个要素进行遍历
# 影像数据类型
# 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.eq():
波段基本运算
- 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():遍历影像集合每一个影像