Reducer
# 简介
Reducer 是PIE-Engine中用来统计计算或者执行聚合的对象。用户可按照时间、空间、波段、数组或其他数据结构进行数据聚合和统计。PIE-Engine Studio提供最大值、最小值、平均值、求和、线性回归等相关算法。
# count
得到一个返回非空个数的统计器。
函数 | 返回值 |
---|---|
count() | Reducer |
// 个数统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.count());
Map.addLayer(image,{min:0,max:10},"Layer");
Map.setCenter(120.161, 31.283,10);
//个数统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var image2 = image.reduce(pie.Reducer.count());
Map.addLayer(image2.select("count"),{min:0,max:3});
Map.setCenter(120.230, 41.810,7);
//个数统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var resultCount = image.reduceRegion(pie.Reducer.count(),geometry,30);
print(resultCount);
//个数统计-Reducer(List)
var list =pie.List([
5.50,6.75,7.25
]);
var resultCount = list.reduce(pie.Reducer.count());
print(resultCount); //3
//个数统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.count(),[]));//[1,1,1,1]
print(array2.reduce(pie.Reducer.count(),[]));//[[1,1,1,1],[1,1,1,1],[1,1,1,1]]
print(array3.reduce(pie.Reducer.count(),[]));//[[[1,1,1,1],[1,1,1,1],[1,1,1,1]],[[1,1,1,1],[1,1,1,1],[1,1,1,1]]]
print(array1.reduce(pie.Reducer.count(),[0]));//[4]
print(array2.reduce(pie.Reducer.count(),[0]));//[[3,3,3,3]]
print(array3.reduce(pie.Reducer.count(),[0]));//[[[2,2,2,2],[2,2,2,2],[2,2,2,2]]]
print(array2.reduce(pie.Reducer.count(),[1]));//[[4],[4],[4]]
print(array3.reduce(pie.Reducer.count(),[1]));//[[[3,3,3,3]],[[3,3,3,3]]]
print(array3.reduce(pie.Reducer.count(),[2]));//[[[4],[4],[4]],[[4],[4],[4]]]
print(array2.reduce(pie.Reducer.count(),[1,0]));//[[12]]
print(array3.reduce(pie.Reducer.count(),[0,1]));//[[[6,6,6,6]]]
print(array3.reduce(pie.Reducer.count(),[0,2]));//[[[8],[8],[8]]]
print(array3.reduce(pie.Reducer.count(),[0,1,2]));//[[[24]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.count(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('count'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# covariance
得到一个返回求协方差矩阵的统计器。
函数 | 返回值 |
---|---|
covariance() | Reducer |
//协方差矩阵统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var result = image.reduceRegion(pie.Reducer.covariance(),geometry,30);
print(result);
//协方差矩阵统计-Reducer(List)
var a1 = pie.Array([1,2,3,4,5]);
var a2 = pie.Array([5,4,3,2,1]);
var result = pie.List([a1, a2]).reduce(pie.Reducer.covariance());
print(result);
# first
得到一个返回起始值的统计器。
函数 | 返回值 |
---|---|
first() | Reducer |
// 起始值统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.first());
Map.addLayer(image,{min:0,max:4000},"Layer");
Map.setCenter(120.161, 31.283,10);
// 起始值统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var image2 = image.reduce(pie.Reducer.first());
Map.addLayer(image2.select("first"),{min:100,max:5000});
Map.setCenter(120.230, 41.810,7);
//起始值统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var resultFirst = image.reduceRegion(pie.Reducer.first(),geometry,30);
print(resultFirst);
// 起始值统计-Reducer(List)
var list =pie.List([
5.50,6.75,7.25
]);
var resultFirst = list.reduce(pie.Reducer.first());
print(resultFirst); //5.5
//起始值统计-Reducer(Array)
var array1 = new pie.Array([1, 2, 3, 4]);
var array2 = new pie.Array([[11, 2, 13, 4], [5, 6, 17, 8], [19, 10, 11, 12]]);
var array3 = new pie.Array([[[11, 2, 13, 4], [5, 6, 17, 8], [19, 10, 11, 12]], [[13, 1, 4, 2], [6, 4, 5, 8], [1, 4, 2, 8]]]);
print(array1.reduce(pie.Reducer.first(), [])); //[1,2,3,4]
print(array3.reduce(pie.Reducer.first(), []));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.first(), [0]));//[1]
print(array2.reduce(pie.Reducer.first(), [0]));//[[11,2,13,4]]
print(array3.reduce(pie.Reducer.first(), [0]));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]]]
print(array2.reduce(pie.Reducer.first(), [1]));//[[11],[5],[19]]
print(array3.reduce(pie.Reducer.first(), [1]));//[[[11,2,13,4]],[[13,1,4,2]]]
print(array3.reduce(pie.Reducer.first(), [2]));//[[[11],[5],[19]],[[13],[6],[1]]]
print(array2.reduce(pie.Reducer.first(), [1, 0]));//[[11]]
print(array3.reduce(pie.Reducer.first(), [0, 1]));//[[[11,2,13,4]]]
print(array3.reduce(pie.Reducer.first(), [0, 2]));//[[[11],[5],[19]]]
print(array3.reduce(pie.Reducer.first(), [0, 1, 2]));//[[[11]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.first(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('first'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# fixedHistogram
得到一个统计器,用于在给定数值区间内统计输入数据的直方图信息。超出[min,max]范围的值将被忽略。输出给定数据在固定区间内steps个子区间的计数信息。
函数 | 返回值 |
---|---|
fixedHistogram(min, max, steps) | Reducer |
参数 | 类型 | 说明 |
---|---|---|
min | List | 固定区间内的最小值(包含),与输入数据的波段相对应 |
max | List | 固定区间内的最大值(不包含),与输入数据的波段相对应 |
steps | Number | 区间内分段个数 |
// 直方图统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var result = image.reduceRegion(pie.Reducer.fixedHistogram([1000,100],[10000,2000],5),geometry,30);
print(result);
# last
得到一个返回结束值的统计器。
函数 | 返回值 |
---|---|
last() | Reducer |
// 结束值统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.last());
Map.addLayer(image,{min:0,max:4000},"Layer");
Map.setCenter(120.161, 31.283,10);
// 结束值统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var image2 = image.reduce(pie.Reducer.last());
Map.addLayer(image2.select("last"),{min:100,max:5000});
Map.setCenter(120.230, 41.810,7);
// 结束值统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var resultLast = image.reduceRegion(pie.Reducer.last(),geometry,30);
print(resultLast);
// 结束值统计-Reducer(List)
var list =pie.List([
5.50,6.75,7.25
]);
var resultLast = list.reduce(pie.Reducer.last());
print(resultLast); //7.25
//结束值统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.last(),[])); //[1,2,3,4]
print(array3.reduce(pie.Reducer.last(),[]));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.last(),[0]));//[4]
print(array2.reduce(pie.Reducer.last(),[0]));//[[19,10,11,12]]
print(array3.reduce(pie.Reducer.last(),[0]));//[[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array2.reduce(pie.Reducer.last(),[1]));//[[4],[8],[12]]
print(array3.reduce(pie.Reducer.last(),[1]));//[[[19,10,11,12]],[[1,4,2,8]]]
print(array3.reduce(pie.Reducer.last(),[2]));//[[[4],[8],[12]],[[2],[8],[8]]]
print(array2.reduce(pie.Reducer.last(),[1,0]));//[[12]]
print(array3.reduce(pie.Reducer.last(),[0,1]));//[[[1,4,2,8]]]
print(array3.reduce(pie.Reducer.last(),[0,2]));//[[[2],[8],[8]]]
print(array3.reduce(pie.Reducer.last(),[0,1,2]));//[[[8]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.last(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('last'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# linearFit
返回一个计算两个输入的(加权)线性回归的斜率和偏离量的统计器,返回的结果包括offset和scale两项信息。
函数 | 返回值 |
---|---|
linearFit() | Reducer |
var visParam1 = {
min: [0,0.5,0],
max: [0.3,2,0.3],
opacity:1,
bands:["offset","scale","offset"]
};
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(["B1","B2"]);
var image1 = image.reduce(pie.Reducer.linearFit());
Map.addLayer(image1,visParam1,"Layer1");
Map.setCenter(120,41.5,8);
var visParam2 = {
min: [0,0.5,0],
max: [300,2,300],
opacity:1,
bands:["offset","scale","offset"]
};
// 时间过滤器
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2018-01-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2"]);
var image2 = imageCollection.reduce(pie.Reducer.linearFit());
Map.addLayer(image2,visParam2,"Layer2");
Map.setCenter(120.161, 31.283,10);
// 自变量
var x1 = [
-0.05, 0.25,0.60,0, 0.25,0.20, 0.15,0.05,
-0.15, 0.15, 0.20, 0.10,0.40,0.45,0.35,
0.30, 0.50,0.50, 0.40,-0.05, -0.05,-0.10,
0.20,0.10,0.50,0.60,-0.05,0, 0.05, 0.55
];
// 因变量
var y = [
7.38,8.51,9.52,7.50,9.33,8.28,8.75,7.87,
7.10,8.00, 7.89,8.15,9.10,8.86,8.90,8.87,
9.26,9.00,8.75,7.95, 7.65,7.27,8.00,8.50,
8.75,9.21,8.27,7.67,7.93,9.26
];
var list = pie.List([x1,y]);
var result = list.reduce(pie.Reducer.linearFit());
print(result);
//起始值统计-Reducer(Dictionary), 要求Dictionary中有且只有两个数据集
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,20,"","",10);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.linearFit(),['B1','B2']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('linearFit'));
var pieNumber = pie.Number(dictionary.get("offset"));
print(pieNumber);
# linearRegression
创建一个计算有numX个自变量和numY个因变量的最小二乘法线性回归统计器。每个输入元组包含自变量和因变量的值。 输出的结果是一个多波段的影像,波段命名根据因变量和自变量的个数命名,例如coefficients_Y0_A0,表示第一个因变量的第一个自变量系数。
函数 | 返回值 |
---|---|
linearRegression(numX,numY) | Reducer |
参数 | 类型 | 说明 |
---|---|---|
numX | Number | 自变量的个数 |
numY | Number | 因变量的个数 |
var visParam = {
min: [-400,-3,0],
max: [-200,0,4],
opacity:1,
bands:["coefficients_Y0_A0","coefficients_Y0_A1","coefficients_Y0_A2"]
};
// 时间过滤器
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2018-01-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3","B4"]);
imageCollection = imageCollection.map(function (image){
var image1 = pie.Image(1).toInt16();
image1 = image1.addBands(image);
return image1;
})
var image = imageCollection.reduce(pie.Reducer.linearRegression(3,2));
Map.addLayer(image,visParam);
Map.setCenter(120.161, 31.283,10);
var visParam = {
min: [0.001,0.5,0.5],
max: [0.005,1,1],
opacity:1,
bands:["coefficients_Y0_A0","coefficients_Y0_A1","coefficients_Y0_A2"]
};
// 时间过滤器
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2018-01-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3","B4"]);
imageCollection = imageCollection.map(function (image){
var image1 = pie.Image(1).toInt16();
image1 = image1.addBands(image);
return image1;
})
var image = imageCollection.first().reduce(pie.Reducer.linearRegression(3,2));
Map.addLayer(image,visParam);
Map.setCenter(120.161, 31.283,10);
// 自变量
var x0 = [
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1
];
var x1 = [
-0.05, 0.25,0.60,0, 0.25,0.20, 0.15,0.05,
-0.15, 0.15, 0.20, 0.10,0.40,0.45,0.35,
0.30, 0.50,0.50, 0.40,-0.05, -0.05,-0.10,
0.20,0.10,0.50,0.60,-0.05,0, 0.05, 0.55
];
var x2 = [
5.50,6.75,7.25,5.50,7.00,6.50,6.75,5.25,
5.25,6.00, 6.50,6.25,7.00,6.90,6.80,6.80,
7.10,7.00,6.80,6.50, 6.25,6.00,6.50,7.00,
6.80,6.80,6.50,5.75,5.80,6.80
];
// 因变量
var y = [
7.38,8.51,9.52,7.50,9.33,8.28,8.75,7.87,
7.10,8.00, 7.89,8.15,9.10,8.86,8.90,8.87,
9.26,9.00,8.75,7.95, 7.65,7.27,8.00,8.50,
8.75,9.21,8.27,7.67,7.93,9.26
];
var list = pie.List([x0,x1,x2,y]);
var result = list.reduce(pie.Reducer.linearRegression(3,1));
print(result);
// 因变量
var y1 = [
7.38,8.51,9.52,7.50,9.33,8.28,8.75,7.87,
7.10,8.00, 7.89,8.15,9.10,8.86,8.90,8.87,
9.26,9.00,8.75,7.95, 7.65,7.27,8.00,8.50,
8.75,9.21,8.27,7.67,7.93,9.26
];
var y2 = [
8.38,9.51,10.52,8.50,10.33,9.28,9.75,8.87,
8.10,9.00, 8.89,9.15,10.10,9.86,9.90,9.87,
10.26,10.00,9.75,8.95, 8.65,8.27,9.00,9.50,
9.75,10.21,9.27,8.67,8.93,10.26
];
var list1 = pie.List([x0,x1,x2,y1,y2]);
var result1 = list1.reduce(pie.Reducer.linearRegression(3,2));
print(result1);
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,20,"","",10);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.linearRegression(3,1),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('linearRegression'));
print(dictionary);
# max
得到一个返回统计最大值的统计器。
函数 | 返回值 |
---|---|
max() | Reducer |
// 最大值统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.max());
Map.addLayer(image,{min:0,max:4000},"Layer1");
Map.setCenter(120.161, 31.283,10);
// 最大值统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4',"B5"]);
var image2 = image.reduce(pie.Reducer.max());
Map.addLayer(image2.select("max"),{min:100,max:5000});
Map.setCenter(120.230, 41.810,7);
//最大值统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4',"B5"]);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var resultMax = image.reduceRegion(pie.Reducer.max(),geometry,30);
print(resultMax);
// 最大值统计-Reducer(List)
var list =pie.List([
5.50,6.75,7.25,5.50,7.00,6.50,6.75,5.25,
5.25,6.00, 6.50,6.25,7.00,6.90,6.80,6.80,
7.10,7.00,6.80,6.50, 6.25,6.00,6.50,7.00,
6.80,6.80,6.50,5.75,5.80,6.80
]);
var resultMax = list.reduce(pie.Reducer.max());
print(resultMax);
//最大值统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.max(),[])); //[1,2,3,4]
print(array3.reduce(pie.Reducer.max(),[]));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.max(),[0]));//[4]
print(array2.reduce(pie.Reducer.max(),[0]));//[[19,10,17,12]]
print(array3.reduce(pie.Reducer.max(),[0]));//[[[13,2,13,4],[6,6,17,8],[19,10,11,12]]]
print(array2.reduce(pie.Reducer.max(),[1]));//[[13],[17],[19]]
print(array3.reduce(pie.Reducer.max(),[1]));//[[[19,10,17,12]],[[13,4,5,8]]]
print(array3.reduce(pie.Reducer.max(),[2]));//[[[13],[17],[19]],[[13],[8],[8]]]
print(array2.reduce(pie.Reducer.max(),[1,0]));//[[19]]
print(array3.reduce(pie.Reducer.max(),[0,1]));//[[[19,10,17,12]]]
print(array3.reduce(pie.Reducer.max(),[0,2]));//[[[13],[17],[19]]]
print(array3.reduce(pie.Reducer.max(),[0,1,2]));//[[[19]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.max(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('max'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# mean
得到一个返回求平均值的统计器。
函数 | 返回值 |
---|---|
mean() | Reducer |
// 平均值统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.mean());
Map.addLayer(image,{min:0,max:2000},"Layer");
Map.setCenter(120.161, 31.283,10);
// 平均值统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var image2 = image.reduce(pie.Reducer.mean());
Map.addLayer(image2.select("mean"),{min:100,max:2000});
Map.setCenter(120.230, 41.810,7);
// 平均值统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var result = image.reduceRegion(pie.Reducer.mean(),geometry,30);
print(result);
// 平均值统计-Reducer(List)
var list =pie.List([
5.50,6.75,7.25
]);
var result = list.reduce(pie.Reducer.mean());
print(result); //6.5
// 平均值统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.mean(),[])); //[1,2,3,4]
print(array3.reduce(pie.Reducer.mean(),[]));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.mean(),[0]));//[2.5]
print(array2.reduce(pie.Reducer.mean(),[0]));//[[11.666666666666666,6,13.666666666666666,8]]
print(array3.reduce(pie.Reducer.mean(),[0]));//[[[12,1.5,8.5,3],[5.5,5,11,8],[10,7,6.5,10]]]
print(array2.reduce(pie.Reducer.mean(),[1]));//[[7.5],[9],[13]]
print(array3.reduce(pie.Reducer.mean(),[1]));//[ [[11.666666666666666,6,13.666666666666666,8]],[[6.666666666666667,3,3.6666666666666665,6]]]
print(array3.reduce(pie.Reducer.mean(),[2]));//[[[7.5],[9],[13]],[[5],[5.75],[3.75]]]
print(array2.reduce(pie.Reducer.mean(),[1,0]));//[[9.833333333333334]]
print(array3.reduce(pie.Reducer.mean(),[0,1]));//[[[9.166666666666666,4.5,8.666666666666666,7]]]
print(array3.reduce(pie.Reducer.mean(),[0,2]));//[[[6.25],[7.375],[8.375]]]
print(array3.reduce(pie.Reducer.mean(),[0,1,2]));//[[[7.333333333333333]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.mean(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('mean'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# median
得到一个返回求中值的统计器。
函数 | 返回值 |
---|---|
median() | Reducer |
// 中值统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.median());
Map.addLayer(image,{min:0,max:2000},"Layer");
Map.setCenter(120.161, 31.283,10);
// 中值统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var image2 = image.reduce(pie.Reducer.median());
Map.addLayer(image2.select("median"),{min:100,max:2000});
Map.setCenter(120.230, 41.810,7);
// 中值统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var result = image.reduceRegion(pie.Reducer.median(),geometry,30);
print(result);
// 中值统计-Reducer(List)
var list =pie.List([
8,5.50,9,6.75,7.25
]);
var result = list.reduce(pie.Reducer.median());
print (result); //7.25
// 中值统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.median (),[])); //[1,2,3,4]
print(array3.reduce(pie.Reducer.median(),[]));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.median(),[0]));//[2.5]
print(array2.reduce(pie.Reducer.median(),[0]));//[[11,6,13,8]]
print(array3.reduce(pie.Reducer.median(),[0]));//[[[12,1.5,8.5,3],[5.5,5,11,8],[10,7,6.5,10]]]
print(array2.reduce(pie.Reducer.median(),[1]));//[[7.5],[7],[11.5]]
print(array3.reduce(pie.Reducer.median(),[1]));//[[[11,6,13,8]],[[6,4,4,8]]]
print(array3.reduce(pie.Reducer.median(),[2]));//[[[7.5],[7],[11.5]],[[3],[5.5],[3]]]
print(array2.reduce(pie.Reducer.median(),[1,0]));//[[10.5]]
print(array3.reduce(pie.Reducer.median(),[0,1]));//[[[8.5,4,8,8]]]
print(array3.reduce(pie.Reducer.median(),[0,2]));//[[[4],[6],[9]]]
print(array3.reduce(pie.Reducer.median(),[2,1]));//[[[10.5]],[[4]]]
print(array3.reduce(pie.Reducer.median(),[0,1,2]));//[[[6]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.median(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('median'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# min
得到一个返回统计最小值的统计器。
函数 | 返回值 |
---|---|
min() | Reducer |
// 最小值统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.min());
Map.addLayer(image,{min:0,max:4000},"Layer1");
Map.setCenter(120.161, 31.283,10);
// 最小值统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4',"B5"]);
var image2 = image.reduce(pie.Reducer.min());
Map.addLayer(image2.select("min"),{min:100,max:5000});
Map.setCenter(120.230, 41.810,7);
//最小值统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4',"B5"]);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var resultMin = image.reduceRegion(pie.Reducer.min(),geometry,30);
print(resultMin);
// 最小值统计-Reducer(List)
var list =pie.List([
5.50,6.75,7.25,5.50,7.00,6.50,6.75,5.25,
5.25,6.00, 6.50,6.25,7.00,6.90,6.80,6.80,
7.10,7.00,6.80,6.50, 6.25,6.00,6.50,7.00,
6.80,6.80,6.50,5.75,5.80,6.80
]);
var resultMin = list.reduce(pie.Reducer.min());
print(resultMin);
//最小值统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.min(),[])); //[1,2,3,4]
print(array3.reduce(pie.Reducer.min(),[]));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.min(),[0]));//[1]
print(array2.reduce(pie.Reducer.min(),[0]));//[[5,2,11,4]
print(array3.reduce(pie.Reducer.min(),[0]));//[[[11,1,4,2],[5,4,5,8],[1,4,2,8]]]
print(array2.reduce(pie.Reducer.min(),[1]));//[[2],[5],[10]]
print(array3.reduce(pie.Reducer.min(),[1]));//[[[5,2,11,4]],[[1,1,2,2]]]
print(array3.reduce(pie.Reducer.min(),[2]));//[[[2],[5],[10]],[[1],[4],[1]]]
print(array2.reduce(pie.Reducer.min(),[1,0]));//[[2]]
print(array3.reduce(pie.Reducer.min(),[0,1]));//[[[1,1,2,2]]]
print(array3.reduce(pie.Reducer.min(),[0,2]));//[[[1],[4],[1]]]
print(array3.reduce(pie.Reducer.min(),[0,1,2]));//[[[1]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.min(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('min'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# minMax
得到一个返回最大、最小值的统计器。
函数 | 返回值 |
---|---|
minMax() | Reducer |
// 最大最小值统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2018-01-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image1 = imageCollection.reduce(pie.Reducer.minMax());
Map.addLayer(image1.select(["B1_min","B2_min","B3_min"]),{min:0,max:5000},"Layer1");
Map.setCenter(120.161, 31.283,10);
// 最大最小值统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4',"B5"]);
var image2 = image.reduce(pie.Reducer.minMax());
Map.addLayer(image2.select("min"),{min:0,max:5000});
Map.setCenter(120.230, 41.810,7);
// 最大最小值统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4',"B5"]);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var resultMinMax = image.reduceRegion(pie.Reducer.minMax(),geometry,30);
print(resultMinMax);
// 最大最小值统计-ReducerRegion
var list =pie.List([
5.50,6.75,7.25,5.50,7.00,6.50,6.75,5.25,
5.25,6.00, 6.50,6.25,7.00,6.90,6.80,6.80,
7.10,7.00,6.80,6.50, 6.25,6.00,6.50,7.00,
6.80,6.80,6.50,5.75,5.80,6.80
]);
var resultMinMax = list.reduce(pie.Reducer.minMax());
print(resultMinMax);
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.minMax(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('minMax'));
var dic = pie.Dictionary(reduceColumnsResult.get('min'));
var pieNumber = pie.Number(dic.get("B2"));
print(pieNumber);
# mode (opens new window)
得到一个返回求众数的统计器,当存在多个众数时,取多个众数中的最小值。
函数 | 返回值 |
---|---|
mode() | Reducer |
// 众数统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.mode());
Map.addLayer(image,{min:0,max:400},"Layer");
Map.setCenter(120.161, 31.283,10);
// 众数统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4','B5','B6','B7','B8']);
var image2 = image.reduce(pie.Reducer.mode());
Map.addLayer(image2.select("mode"),{min:100,max:2000});
Map.setCenter(120.230, 41.810,7);
// 众数统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var result = image.reduceRegion(pie.Reducer.mode(),geometry,30);
print(result);
// 众数统计-Reducer(List)
var list = pie.List([
8, 12, 11, 6, 5, 4, 7, 9, 2, 1, 3, 13, 12, 11
]);
var result = list.reduce(pie.Reducer.mode());
print (result); //11
// 众数统计-Reducer(Array)
var array1= new pie.Array([1,2,1,4]);
var array2=new pie.Array([[11,2,11,4],[5,6,2,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,13,8],[19,2,11,12]],[[13,1,4,2],[6,4,1,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.mode (),[])); //[1,2,1,4]
print(array3.reduce(pie.Reducer.mode(),[]));//[[[11,2,13,4],[5,6,13,8],[19,2,11,12]],[[13,1,4,2],[6,4,1,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.mode(),[0]));//[1]
print(array2.reduce(pie.Reducer.mode(),[0]));//[[5,2,11,4]]
print(array3.reduce(pie.Reducer.mode(),[0]));//[[[11,1,4,2],[5,4,1,8],[1,2,2,8]]]
print(array2.reduce(pie.Reducer.mode(),[1]));//[[11],[2],[10]]
print(array3.reduce(pie.Reducer.mode(),[1]));//[[[5,2,13,4]],[[1,4,1,8]]]
print(array3.reduce(pie.Reducer.mode(),[2]));//[[[2],[5],[2]],[[1],[1],[1]]]
print(array2.reduce(pie.Reducer.mode(),[1,0]));//[[11]]
print(array3.reduce(pie.Reducer.mode(),[0,1]));//[[[1,2,13,8]]]
print(array3.reduce(pie.Reducer.mode(),[0,2]));//[[[2],[6],[2]]]
print(array3.reduce(pie.Reducer.mode(),[2,1]));//[[[2]],[[1]]]
print(array3.reduce(pie.Reducer.mode(),[0,1,2]));//[[[2]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.mode(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('mode'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# pearsonsCorrelation (opens new window)
得到一个返回皮尔逊系数的统计器,统计器返回的结果包括一个皮尔逊系数值或波段和一个p-value值或波段。
函数 | 返回值 |
---|---|
pearsonsCorrelation() | Reducer |
var x1 = [
-0.05, 0.25,0.60,0, 0.25,0.20, 0.15,0.05,
-0.15, 0.15, 0.20, 0.10,0.40,0.45,0.35,
0.30, 0.50,0.50, 0.40,-0.05, -0.05,-0.10,
0.20,0.10,0.50,0.60,-0.05,0, 0.05, 0.55
];
var x2 = [
5.50,6.75,7.25,5.50,7.00,6.50,6.75,5.25,
5.25,6.00, 6.50,6.25,7.00,6.90,6.80,6.80,
7.10,7.00,6.80,6.50, 6.25,6.00,6.50,7.00,
6.80,6.80,6.50,5.75,5.80,6.80
];
var list = pie.List([x1,x2]);
var result = list.reduce(pie.Reducer.pearsonsCorrelation());
print(result);
var visParam = {
min: 0.9,
max: 1,
opacity:1,
};
// 时间过滤器
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2018-01-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2"]);
var image1 = imageCollection.reduce(pie.Reducer.pearsonsCorrelation());
Map.addLayer(image1.select("correlation"),visParam,"Layer2");
Map.setCenter(120.161, 31.283,10);
//起始值统计-Reducer(Dictionary) , 要求Dictionary中有且只有两个数据集
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,20,"","",10);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.pearsonsCorrelation(),['B1','B2']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('pearsonsCorrelation'));
var pieNumber = pie.Number(dictionary.get("p-value"));
print(pieNumber);
# percentile (opens new window)
得到一个返回指定百分位上数值的统计器。
函数 | 返回值 |
---|---|
percentile(percentiles, outputNames) | Reducer |
参数 | 类型 | 说明 |
---|---|---|
percentiles | List | 由0到100之间数值组成的数组 |
outputNames | List | 输出的名称列表,默认为null |
// 百分位数值统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.percentile([10]));
Map.addLayer(image,{min:0,max:400},"Layer");
Map.setCenter(120.161, 31.283,10);
// 百分位数值统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4','B5']);
var result = image.reduce(pie.Reducer.percentile([50]));
Map.addLayer(result,{min:100,max:2000});
Map.setCenter(120.230, 41.810,7);
// 百分位数值统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var result = image.reduceRegion(pie.Reducer.percentile([20,80]),geometry,30);
print(result);
// 百分位数值统计-Reducer(List)
var list =pie.List([
1,2,5,8,5,2,2,6,6,2,9,2,3,4,5,6,7,8,9,10
]);
var result = list.reduce(pie.Reducer.percentile([0,10,60,100]));
print (result); //{p0: 1, p10: 2, p60: 6, p100: 10}
// 百分位数值统计-Reducer(Array)
var array1 = pie.Array([1, 2, 3, 4]);
var array2 = pie.Array([[11, 2, 13, 4], [5, 6, 17, 8], [19, 10, 11, 12]]);
var array3 = pie.Array([[[11, 2, 13, 4], [5, 6, 17, 8], [19, 10, 11, 12]], [[13, 1, 4, 2], [6, 4, 5, 8], [1, 4, 2, 8]]]);
print(array1.reduce(pie.Reducer.percentile([20]), [])); //[1,2,3,4]
print(array3.reduce(pie.Reducer.percentile([40]), []));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.percentile([60]), [0]));//[3]
print(array2.reduce(pie.Reducer.percentile([80]), [0]));//[[19,10,17,12]]
print(array3.reduce(pie.Reducer.percentile([30]), [0]));//[[[11,1,4,2],[5,4,5,8],[1,4,2,8]]]
print(array2.reduce(pie.Reducer.percentile([50]), [1]));//[[7.5],[7],[11.5]]
print(array3.reduce(pie.Reducer.percentile([70]), [1]));//[[[19,10,17,12]],[[13,4,5,8]]]
print(array3.reduce(pie.Reducer.percentile([90]), [2]));//[[[13],[17],[19]],[[13],[8],[8]]]
print(array2.reduce(pie.Reducer.percentile([100]), [1, 0]));//[[19]]
print(array3.reduce(pie.Reducer.percentile([0]), [0, 1]));//[[[1,1,2,2]]]
print(array3.reduce(pie.Reducer.percentile([5]), [0, 2]));//[[[1],[4],[1]]]
print(array3.reduce(pie.Reducer.percentile([15]), [2, 1]));//[[[4]],[[1]]]
print(array3.reduce(pie.Reducer.percentile([35]), [0, 1, 2]));//[[[4]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,20,"","",10);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.percentile([0, 50, 100], ["min", "median", "max"]),['B1','B2']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('percentile'));
var dic_b1 = pie.Dictionary(dictionary.get('B1'));
var pieNumber = pie.Number(dic_b1.get("median"));
print(pieNumber);
# sensSlope (opens new window)
针对ImageCollection对象创建一个Sen's斜率的计算器,ImageCollection中的Image对象应包含两个波段,第一个波段为x数据,第二个波段为y数据,计算器返回估计的坡度。
函数 | 返回值 |
---|---|
sensSlope() | Reducer |
var region = pie.Geometry.Polygon([
[[111.22695843953045,20.169940442822693],
[108.587708332749,20.169940442822693],
[108.587708332749,18.149838191339043],
[111.22695843953045,18.149838191339043],
[111.22695843953045,20.169940442822693]]], null);
var mod13 = pie.ImageCollection('USGS/MOD13Q1/006');
var mod13Summer = mod13.filter(pie.Filter.calendarRange(6, 7, 'month'))
.filter(pie.Filter.calendarRange(2018, 2020, 'year'))
.filterBounds(region)
.map(function(img) {
return img.set('year', img.date().get('year'));
});
var image2018= mod13Summer.filter(pie.Filter.eq("year",2018)).select("NDVI").max().rename("max").clip(region);
var image2019= mod13Summer.filter(pie.Filter.eq("year",2019)).select("NDVI").max().rename("max").clip(region);
var image2020= mod13Summer.filter(pie.Filter.eq("year",2020)).select("NDVI").max().rename("max").clip(region);
image2018= pie.Image().constant(2018).rename("year").addBands(image2018);
image2019= pie.Image().constant(2019).rename("year").addBands(image2019);
image2020= pie.Image().constant(2020).rename("year").addBands(image2020);
var imageColc=pie.ImageCollection.fromImages([image2018,image2019,image2020]);
var sens = imageColc.reduce(pie.Reducer.sensSlope());
var visParams = {
opacity: 1,
bands: ['slope'],
min: -55,
max: 55,
palette:
['8c510a', 'd8b365', 'f6e8c3', 'f5f5f5', 'd9f0d3', '7fbf7b', '1b7837']
};
Map.addLayer(sens, visParams, 'sensSlope');
Map.setCenter(109.86, 19.20, 6);
# stdDev (opens new window)
得到一个返回求标准差的统计器。
函数 | 返回值 |
---|---|
stdDev() | Reducer |
// 标准差统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.stdDev());
Map.addLayer(image,{min:0,max:200},"Layer1");
Map.setCenter(120.161, 31.283,10);
//标准差统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var image2 = image.reduce(pie.Reducer.stdDev());
Map.addLayer(image2.select("stdDev"),{min:10,max:200});
Map.setCenter(120.230, 41.810,7);
//标准差统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var result = image.reduceRegion(pie.Reducer.stdDev(),geometry,30);
print(result);
//标准差统计-Reducer(List)
var list =pie.List([
8,11,6
]);
var result = list.reduce(pie.Reducer.stdDev());
print (result); //2.0548046676563256
//标准差统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.stdDev (),[])); //[0,0,0,0]
print(array3.reduce(pie.Reducer.stdDev(),[]));//[[[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0]]]
print(array1.reduce(pie.Reducer.stdDev(),[0]));//[1.118033988749895]
print(array2.reduce(pie.Reducer.stdDev(),[0]));//[[5.734883511361751,3.265986323710904,2.494438257849292,3.265986323710904]]
print(array3.reduce(pie.Reducer.stdDev(),[0]));//[[[1,0.5,4.5,1],[0.5,1,6,0],[9,3,4.5,2]]]
print(array2.reduce(pie.Reducer.stdDev(),[1]));//[[4.6097722286464435],[4.743416490252569],[3.5355339059327378]]
print(array3.reduce(pie.Reducer.stdDev(),[1]));//[[[5.734883511361751,3.265986323710904,2.494438257849292,3.265986323710904]],[[4.9216076867444665,1.4142135623730951,1.2472191289246468,2.8284271247461903]]]
print(array3.reduce(pie.Reducer.stdDev(),[2]));//[[[4.6097722286464435],[4.743416490252569],[3.5355339059327378]], [[4.743416490252569],[1.479019945774904],[2.680951323690902]]]
print(array2.reduce(pie.Reducer.stdDev(),[1,0]));//[[4.913134324327893]]
print(array3.reduce(pie.Reducer.stdDev(),[0,1]));//[[[5.899623340142619,2.9297326385411577,5.374838498865699,3.2145502536643185]]]
print(array3.reduce(pie.Reducer.stdDev(),[0,2]));//[[[4.841229182759271],[3.8709656418005056],[5.588772226527039]]]
print(array3.reduce(pie.Reducer.stdDev(),[2,1]));//[[[4.913134324327893]],[[3.362373500305336]]]
print(array3.reduce(pie.Reducer.stdDev(),[0,1,2]));//[[[4.89614360718946]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.stdDev(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('stdDev'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# sum (opens new window)
得到一个返回求和的统计器。
函数 | 返回值 |
---|---|
sum() | Reducer |
// 求和统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.sum());
Map.addLayer(image,{min:0,max:4000},"Layer1");
Map.setCenter(120.161, 31.283,10);
// 求和统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var image2 = image.reduce(pie.Reducer.sum());
Map.addLayer(image2.select("sum"),{min:100,max:5000});
Map.setCenter(120.230, 41.810,7);
//求和统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var resultsum = image.reduceRegion(pie.Reducer.sum(),geometry,30);
print(resultsum);
// 求和统计-Reducer(List)
var list =pie.List([
5.50,6.75,7.25
]);
var resultSum = list.reduce(pie.Reducer.sum());
print(resultSum); //19.5
//求和统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.sum(),[])); //[1,2,3,4]
print(array3.reduce(pie.Reducer.sum(),[]));//[[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]
print(array1.reduce(pie.Reducer.sum(),[0]));//[10]
print(array2.reduce(pie.Reducer.sum(),[0]));//[[35,18,41,24]]
print(array3.reduce(pie.Reducer.sum(),[0]));//[[[24,3,17,6],[11,10,22,16],[20,14,13,20]]]
print(array2.reduce(pie.Reducer.sum(),[1]));//[[30],[36],[52]]
print(array3.reduce(pie.Reducer.sum(),[1]));//[[[35,18,41,24]],[[20,9,11,18]]]
print(array3.reduce(pie.Reducer.sum(),[2]));//[[[30],[36],[52]],[[20],[23],[15]]]
print(array2.reduce(pie.Reducer.sum(),[1,0]));//[[118]]
print(array3.reduce(pie.Reducer.sum(),[0,1]));//[[[55,27,52,42]]]
print(array3.reduce(pie.Reducer.sum(),[0,2]));//[[[50],[59],[67]]]
print(array3.reduce(pie.Reducer.sum(),[0,1,2]));//[[[176]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.sum(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('sum'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# toList (opens new window)
得到一个返回数据列表的统计器。
函数 | 返回值 |
---|---|
toList() | Reducer |
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.toList(),['B1','B2','B3','B4']);
var list = pie.List(reduceColumnsResult.get("list"));
var dictionary = pie.Dictionary(list.get(0));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);
# variance (opens new window)
得到一个返回求方差的统计器。
函数 | 返回值 |
---|---|
variance() | Reducer |
// 方差统计-Reducer(ImageCollection)
var filterCloud = pie.Filter.lte("cloudCover",5);
var imageCollection = pie.ImageCollection().load("LC08/01/T1_SR")
.filterDate("2019-10-01", "2020-01-01")
.filter(filterCloud).select(["B1","B2","B3"]);
var image = imageCollection.reduce(pie.Reducer.variance());
Map.addLayer(image,{min:0,max:400},"Layer1");
Map.setCenter(120.161, 31.283,10);
// 方差统计-Reducer(Image)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var image2 = image.reduce(pie.Reducer.variance());
Map.addLayer(image2.select("variance"),{min:100,max:2000});
Map.setCenter(120.230, 41.810,7);
// 方差统计-ReducerRegion
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var result = image.reduceRegion(pie.Reducer.variance(),geometry,30);
print(result);
// 方差统计-Reducer(List)
var list =pie.List([
8,11,6
]);
var result = list.reduce(pie.Reducer.variance());
print (result); //4.222222222222222
// 方差统计-Reducer(Array)
var array1=new pie.Array([1,2,3,4]);
var array2=new pie.Array([[11,2,13,4],[5,6,17,8],[19,10,11,12]]);
var array3=new pie.Array([[[11,2,13,4],[5,6,17,8],[19,10,11,12]],[[13,1,4,2],[6,4,5,8],[1,4,2,8]]]);
print(array1.reduce(pie.Reducer.variance (),[])); //[0,0,0,0]
print(array3.reduce(pie.Reducer.variance(),[]));//[[[0,0,0,0],[0,0,0,0],[0,0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0]]]
print(array1.reduce(pie.Reducer.variance(),[0]));//[1.25]
print(array2.reduce(pie.Reducer.variance(),[0]));//[[32.88888888888886,10.666666666666666,6.22222222222221,10.666666666666666]]
print(array3.reduce(pie.Reducer.variance(),[0]));//[[[1,0.25,20.25,1],[0.25,1,36,0],[81,9,20.25,4]]]
print(array2.reduce(pie.Reducer.variance(),[1]));//[[21.25],[22.5],[12.5]]
print(array3.reduce(pie.Reducer.variance(),[1]));//[[[32.88888888888889,10.666666666666666,6.22222222222221,10.666666666666666]],[[24.222222222222218,2,1.5555555555555547,8]]]
print(array3.reduce(pie.Reducer.variance(),[2]));//[[[21.25],[22.5],[12.5]], [[22.5],[2.1875],[7.1875]]]
print(array2.reduce(pie.Reducer.variance(),[1,0]));//[[24.138888888888896]]
print(array3.reduce(pie.Reducer.variance(),[0,1]));//[[[34.80555555555556,8.583333333333334,28.888888888888886,10.333333333333334]]]
print(array3.reduce(pie.Reducer.variance(),[0,2]));//[[[23.4375],[14.984375],[31.234375]]]
print(array3.reduce(pie.Reducer.variance(),[2,1]));//[[[24.13888888888889]],[[11.30555555555555]]]
print(array3.reduce(pie.Reducer.variance(),[0,1,2]));//[[[23.972222222222225]]]
//起始值统计-Reducer(Dictionary)
var image = pie.Image("LC08/01/T1/LC08_121031_20181019").select(['B1','B2','B3','B4']);
var geometry = pie.Geometry.Polygon([[[119.5, 41.5], [120, 41.5], [120, 42],[119.5,42],[119.5, 41.5]]], null);
var training = image.sample(geometry,30,"","",4);
var reduceColumnsResult = training.reduceColumns(pie.Reducer.variance(),['B1','B2','B3','B4']);
var dictionary = pie.Dictionary(reduceColumnsResult.get('variance'));
var pieNumber = pie.Number(dictionary.get("B2"));
print(pieNumber);