||
(一)Reducer
1. Reducer OverviewReduce是用来处理图像集合的重要工具, 这个类中的reduce可以指定一个简单的统计量用于汇总(例如,最小值,最大值,平均值,中位数,标准偏差等),或者更复杂的输入数据汇总(例如直方图,线性回归,列表),下面这张图可以比较好的说明reducer的作用:
2. 图的针对ImageCollection时的ee.Reducer()
3. Statistics of an Image Region
这里的reduction和之前的稍有差别,相比与之前的image stack的样子,这里的统计结果是这样的
进行统计的时候可以对像元尺度、像元数目等进行处理
4. Statistics of Image Neighborhoods
这种统计方法的示意图如下
(二)GEE数据类型—Dictionary,List,Array
文本和数字的功能是进行描述和数据储存,而Dictionary,List和Array可以看作是文本和数字间通过不同结合形式而形成的新的数据类型。简单的说,Dictionary,List和Array是拥有了一定“格式”的文本或数字
1 Dictionary
//创建一个字典变量 var Dictionary_Profile = ee.Dictionary( { Name: 'Mary', Gender: 'Female', Age: '> 30', Location: 'Beijing' } ); //冒号左边是关键词(Key),它就是变量,所以不需要加引号,冒号右边是关键词对应的内容(content) //有相同 Key 字典变量组合后 true 在合并的字典中就会将重复的内容保留为第二个变量的值,false反之 var Dict_Combine = Dict_1.combine( Dict_2, true ); //字典内容更改 var Dict_Change = Dict_1.set('Age', '<30' ); //字典管检测陈列 var List_Keys= Dict_1.keys( ); print( List_Keys); var The_Name = Dict_1.get('Name' );//单字段信息读取 var The_Values = Dict_1.values(['Name','Age','Location' ]);//多字段查询 var The_Contain = Dict_1.contains('Hight');//查询括号内的关键词是否存在于字典 var The_Size = Dict_1.size();//尺寸查询
2 List
List主要用来存储一系列数据,这些数据可以由不同的格式(比如数字,文本,字典等)组成。我们可以把List理解为“文件夹”,用来在GEE的代码中存储各种数据。
List内部通过逗号“,”来分割空间,同时其中的每一个空间都可以用来存储任意数据格式(包括遥感图像和矢量文件)的数据
var List_Example = ee.List( [1,2,3,'A','B','C',['Hello','Good','Bye']] ); //第7个位置(编号为6的位置是第七位)是另一个List var List_Repeat = ee.List.repeat( 'Yeah!', 5 );//重复创建List var List_Sequence= ee.List.sequence( 0, 9, 1 , null );//等差创建List //分别代表等差数列的“首部数字”,“尾部数字”,“公差”和“项数”,其中“公差”和“项数”只能存在一个 ///借助Docs查询 var List_1 = ee.List( [1992,01,20,'No.1'] ); var List_2 = List_1.set(0,1993);//两个参数分别表示“改写位置”和“改写内容” var List_3 = List_1.set(-1,'No.2');// var List_2 = List_1.replace(01,05);//替换第一个出现的01 var List_3 = List_1.replaceAll(01,05);//替换所有 var List_2 = List_1.add('Male');//末尾添加 var List_3 = List_1.insert(3,'Chongqing');//第四个位置插入 var List_1 = ee.List( [1992,01,20,'No.1']);//对应位置的元素打包到子数组中 var List_2 = List_1.zip(['Year','Month','Day']); var List_Reverse = List_1.reverse( );//元素位置倒转 var List_Rotate = List_1.rotate(5);//以List_1的对称中心为中点进行180度翻转 var List_Sort = List_1.sort( );//排序 var List_2 = List_1.swap( 5,8 );//交换位置处元素 var List_2 = List_1.flatten( );//将List中的元素铺平到一位列表中 var List_1 = ee.List([1,1,2,2,3,3,4,4,5,5]) var List_2 = List_1.get(3); var List_3 = List_1.remove(3);//删除第三个元素 var List_4 = List_1.removeAll([3,4]);//删去所谓值为3和4的元素 //判断等于与包含 var True_False_1 = List_1.equals( List_2 ); var True_False_2 = List_1.contains('li'); var True_False_3 = List_1.containsAll(List_3); //5在List中出现的频率 var Frequency_Number = List_Number.frequency(5) //Do是一个函数 var List_2 = List_1.map( Do ); //尺寸计算 相同 var Length_Number_1 = List_1.size( ); var Length_Number_2 = List_1.length( );
理解.map命令的作用是对List中的每一个对象(Object)都执行了某种相同的操作,这种相同的操作由function命令进行编写
List的循环命令
//求1-1000自然数的和 var List_1 = ee.List.sequence(1,1000,1); function Do ( Number_1, Number_2 ) { return ee.Number(Number_1).add(Number_2); } var List_2 = List_1.iterate( Do, 0 ); print( List_1, List_2 );
理解.iterate()命令有两个参数,第一个参数是执行循环要执行的参数方程,第二个是循环的初始量就行。
3 Array
“数组,阵列,矩阵”,其本质上仍属于List的范畴。作为高阶遥感分析中的核心数据格式(使用Array会灵活很多),可以这样理解Array:“带有方向的List”,同时应该注意这种List只能由数字构成。
把方括号外的(List间)逗号想象成换行键按下后的效果
var Array_1 = ee.Array( [[1], [2], [3]]); //3*1 var Array_2 = ee.Array( [[1, 2, 3]]); //1*3 print( Array_1,Array_2 ); var Array_1 = ee.Array.identity( 5 );//单位矩阵 对角线为1 其余为0
矩阵的重复
.repeat( , )的作用是将原矩阵沿着某个方向重复若干次,其中第一个参数是重复方向,第二个参数是拷贝个数。
矩阵重复
var Array_1 = ee.Array([ [ 1,2,3 ],[ 4,5,6 ] ]); var Array_2 = Array_1.repeat( 1,2 );
矩阵的掩膜命令
var Array_1 = ee.Array( [ [1,1],[2,2],[3,3],[4,4]] ); var Array_2 = ee.Array( [ [ 0],[ 0],[ 1],[ 0]] ); var Array_3 = Array_1.mask( Array_2 ); print( Array_1, Array_2, Array_3 );
矩阵的倒置命令
var Array_1 = ee.Array( [ [111,111,111], [222,222,222] ]); var Array_2 = Array_1.transpose(); var Array_3 = Array_2.transpose() print( Array_1, Array_2,Array_3);
矩阵的数据转换
var Array_1 = ee.Array( [ [1.1, 2.2, 3.3], [4.4, 5.5, 6.6] ] ); var Array_2 = Array_1.uint8(); print( Array_1, Array_2 );
矩阵的比较
相等处的元素为1,不等为0
var Array_1 = ee.Array( [ [1,1],[2,2],[3,3],[4,4]] ); var Array_2 = ee.Array( [ [1,2],[3,4],[4,3],[2,1]] ); var Array_3 = Array_1.eq( Array_2 ); print( Array_1, Array_2, Array_3 );
矩阵的交并
var Array_1 = ee.Array( [ [1,0],[0,0],[3.14,1.41]] ); var Array_2 = ee.Array( [ [1,2],[0,0],[3,4]] ); var Array_and = Array_1.and( Array_2 ); var Array_or = Array_1.or( Array_2 ); print( Array_1, Array_2, Array_and, Array_or );
矩阵的函数命令(类似的命令参照Number部分)
var Array_1 = ee.Array( [-3.14, 1.414] ); var Array_2 = Array_1.ceil().abs();
矩阵的数学命令(位运算 移位等类似参照number,不过是多了几行几列的元素)
var Array_1 = ee.Array( [ [1,2,3,4] ] ); var Array_2 = ee.Array( [ [5,6,7,8] ] ); var Result_Array = Array_1.add(Array_2); print ( Array_1, Array_2, Result_Array );
【参考】
https://zhuanlan.zhihu.com/p/129367989
点滴分享,福泽你我!Add oil!
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-28 01:40
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社