【Google Earth Engine编程语言学习笔记】image、imageCollection
一、【image】
(1)创建
1.GEE自带
https://developers.google.com/earth-engine/datasets/catalog
主要有landsat、sentinel哨兵、srtm高程、land cover土地利用
2.用户上传
3.ee.image() ee.image.constant()感觉没太多用处,建立一个图像
4.ee.Image.pixelLonLat()创建一个没有分辨率的栅格图像,这个栅格图像任意点的属性值为经纬度
(2)编辑
1.image.mask()掩膜
var 被掩膜裁减图形的名称=ee.Image(图形的路径) var 掩膜的名称=ee.Image(图形的路径).select(属性字段).eq.(1)//选择属性字段值等于1的值作为掩膜 var 被裁减过后的图形名称=被掩膜裁减图形的名称.mask(掩膜的名称) Map.addLayer(被裁减过后的图形名称)//将被裁减过后的图形添加到地图中
2.image.clip()裁减
var 被裁减图形的名称=ee.Image(图形的路径) var 矢量边界=ee.FeatureCollection(图形的路径).filterBounds(ee.Geometry.point([经度,纬度])//选择该点所在的矢量边界为裁减边界 var 被裁减过后的图形名称=被掩膜裁减图形的名称.clip() Map.addLayer(被裁减过后的图形名称)//将被裁减过后的图形添加到地图中
3.image.select()选择波段
var 需要挑选的波段=导入的图像数据.select('波段名称')
4.image.slice()选择波段
var 挑选的波段=导入的图像数据.slice(起始波段号,终止波段号)
如slice(2,5),即挑选出第3、4、5波段。
4.image.addBands()添加波段
var 波段1=图像.select('B1') var 波段2=图像.select('B2') var 波段12=波段1.addBands('波段2')
5. image.reproject(投影的信息)图像投影
6.image.rgbtohsv()RGB转为HSV image.hsvtorgb()HSV转为RGB
7.image.uint8()数据转换对单波段图像进行 int long float double。。。。
8.image.cast()对多波段的数据进行转换
var img_cast=img.cast({'B3':'double','B4':'double','B5':'double',},['B5','B4''B3'])
9.image.set()设置属性值 image.setMulti({ })多字段设置属性值
10.image.remap([转换之前的])对属性方面的重分类
11.image.where(图像.lt(4000),0)对空间层面的重分类,将图像值小于4000的赋值为0
12.image.metadata('前',‘命名后’)
13.image.clamp(450,800)掐断操作,对于450以下,800以上的值全部赋值为0
14.image.uintScale(-238,5268)将最小值到最大值的区间变为0-1
15.image.interpolate(x,y,超出所提供功能范围的点的方法,包括'extrapolate', 'clamp', 'mask' or 'input')将输入图像第一个波段中的每个点插值到x和y数组指定的分段线性函数中。
原始均匀的拉伸显示效果就会变成分段的显示效果
16.image.eq/neq/gt/gte/lt/lte进行比较操作,等于,不等于,大于,大于等于,小于,小于等于。。。、
17.Image.and()/or() 对不同波段进行运算
18.image.abs()/mod()/round()/floor()/ceil()/sqrt()/exp/log()/log10()
19.image.add/subtract/multiply/divide()可以进行波段运算
20.image.expression('波段表达式',{‘NIR’:img.select('B5'),‘RED’:img.select('B4'),‘BLUE’:img.select('B2')})就会计算出通过波段表达式表达出来的值。
21.image.sin()/cos()/tan()......
22.image.bitwiseAnd/bitwiseOr()二进制计算
(3)地形
1.image.derivative()对每个像元值进行微分操作。
2.ee.Terrain.products()或ee.Algorithms.terrain图像的表面分析函数,然后会得出三个波段,分别为阴影、坡度、坡向
var DEM=ee.image('...') var DEM_pro=ee.Terrain.products(DEM) Map.addLayer(DEM) Map.addLayer(DEM_pro,{bands:['slope']}) Map.addLayer(DEM_pro,{bands:['aspect']}) Map.addLayer(DEM_pro,{bands:['hillshade']})
3.ee.Terrain.hillshadow()或ee.Algorithms.Hillshadow()生成表面纹理,在生成纹理前需要设置投影,坡度之间的距离为米,而不是经纬度
4.ee.Terrain.fillMinima()将图像最低处河谷位置填充成类似盆地的效果
(4)纹理
1.image.entropy()熵值操作,高程变化快的地方熵值大
2.image.glcmTexture()纹理操作,图像识别
3.image.zeroCrossing()对图像海拔0值的过度,在此之前需要减掉起始值
4.ee.Algorithms.CannyEdgeDetector()检测纹理边界
(5)邻域
1.image.focal_max最大值/focal_mean平均值/focal_median中间值/focal_min最小值/focal_mode模
指定一个搜索半径,发现在这个搜索半径中符合搜索定义,则将这个值定义为该邻域的值
如image.focal_max(5,'circel','pixels')用圆形来搜索,将每个邻域的值替换为该邻域的最大值
2.image.convolve()定义一个矩阵,相当于卷积,把图像模糊化和锐化
3.image.reduceNeighborhood()
var DEM=ee.image('...') var DEM_nei=DEM..reduceNeighborhood(ee.Reducer.mean(),ee.Kernel.circle(4))//相当于做了均值滤波
(6)转换
1.image.reduceToVectors()栅格转矢量
2.image.ImageCollection()将单个栅格转为栅格数据集
3.image.ToArray()将多波段值转化为array图像
ArrayImage.arrayFlatten()将array图像转化为多波段图像,需要对每个波段进行命名
栅格图像转化为矢量图像很重要,服务于将原来的空间信息转化为连续的事件信息,对时间信息进行拟合
(7)其他
1.image.reduceRegion()对某个区域进行数学统计
2.image.distance()相当于栅格的缓冲区分析
3.Export.image().toDrive()输出保存
输入各种参数及保存路径
二、【imageCollection】
(1)创建
1.ee.ImageCollection(输入栅格数据集的名称路径) ee.ImageCollection.load()
而通常是在搜索栏中输入栅格关键字,点击import
(2)筛选
1.filterMetadata(云层覆盖量,小于,0.1)通过基本属性筛选,等同于ee.filter.Metadata
2.filterBounds(某地的行政边界.geometry)通过位置筛选,等同于ee.filter.Bounds
3.filterDate(起始时间,终止时间)通过时间筛选,等同于ee.filter.Date
4.limit(10)选择前10条数据集
5.select()与image中的select大同小异
select(['B3','B4','B5'](选择的波段),['NIR','R','G'](重命名))注意选择出来的波段需要有相同的属性
6.distinct()类似于featureCollection中的distinct
对原始数据中重复的数据进行删除
7.combine()将两个数据及合并为一个,从一个数据中选择两个波段,进行组合,组合后不再是同一个图像的两个波段,成为了两个独立的栅格图像
8.uint8数据结构变化
9.set对属性信息进行更改;setMulti对多个属性信息进行更改
(3)求值
1.mosaic()图像镶嵌
var img1=ee.image(' ..') var img2=ee.image(' ..') var img=ee.imageCollection([img1,img2]) var img_mos=img.mosaic()
imageCollection([img1,img2])具有两个不同的图像
但是mosaic后变成一个图像。
2.and/or,波段之间的且和或
sum求和/product求连乘积/max求最大/min最小/mode模/median中间值/count计数,首先得选择一些自己要计算的波段,然后对每个波段进行计算
(4)转换
1. first()会返回imageCollection中第一个图像
var L8=ee.imageCollection('...').filterBounds(ee.Geometry.point(经度,纬度)).filterDate(起止时间).select('B[3-5]').sort('date_acquired'); var L8_1=L8.first()
2.toList()将图像波段转化为list格式,通过get命令获取第几个波段
3.toArray()也可以转化为array图像
4.map()
var L8=ee.imageCollection('...').filterBounds(ee.Geometry.point(经度,纬度)).filterDate(起止时间).select('B[4,5]').limit(3); function addndvi(image){ var ndvi=image.normalizedDifference(['B4','B5']) return image.addBands(ndvi) } var L8_ndvi=L8.map(addndvi)