GEE学习笔记 四十四:Reducer介绍(二)
GEE学习笔记 四十四:Reducer介绍(二)
详细信息
这次介绍的Reducer包括求最大、最小值、求均值、求众数等。
下面所有的代码都使用了一个公共资源如下,后续代码不在重复添加使用。
var roi = /* color: #d63000 */ee.Geometry.Polygon(
[[[116.11220202824006, 38.133561577393166],
[116.37569631837516, 38.1696689233409],
[116.32936651641012, 38.35173534234094],
[116.07083980910647, 38.31789056147068]]]),
l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT_TOA");
function generateImage() {
Map.centerObject(roi, 10);
var img = l8.filterDate("2018-6-1", "2018-8-1")
.filterBounds(roi)
.map(ee.Algorithms.Landsat.simpleCloudScore)
.map(function(image){
image = image.updateMask(image.select("cloud").lte(20));
return image;
})
.map(function(image) {
return image.addBands(image.normalizedDifference(["B5", "B4"]).rename("NDVI"));
})
.select("NDVI")
.mosaic()
.clip(roi);
var visParam = {
min: -0.2,
max: 0.8,
palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
'3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
Map.addLayer(img, visParam, "NDVI");
return img;
}
var img = generateImage();
- ee.Reducer.min()
解释:获取输入的最小值。如果输入是数值列表,获取数值的最小值;如果是影像集合,获取所有匹配波段的每一个像素的最小值;如果是单张影像,获取波段中的像素最小值。
其中min()可以带一个参数,如果是多维的列表可以通过这个参数计算每一个列表的最小值。
例子:
function min() {
//ee.Reducer.min
//list
var a = ee.List([2,1,3,4,5]);
print("min", a.reduce(ee.Reducer.min()));
//多维的list输出结果
var b = ee.List([[1,2],[2,3]]);
print("min", b.reduce(ee.Reducer.min(2)));
//image collection
var l8Col = l8.filterDate("2018-6-1", "2018-8-1")
.filterBounds(roi)
.map(ee.Algorithms.Landsat.simpleCloudScore)
.map(function(image){
image = image.updateMask(image.select("cloud").lte(20));
return image;
})
.map(function(image) {
return image.addBands(image.normalizedDifference(["B5", "B4"]).rename("NDVI"));
})
.select("NDVI");
var image = l8Col.reduce(ee.Reducer.min());
print(image);
var visParam = {
min: -0.2,
max: 0.8,
palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
'3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
Map.addLayer(image.clip(roi), visParam, "NDVI_min");
//image
var dict = img.reduceRegion({
reducer: ee.Reducer.min(),
geometry: roi,
scale: 30,
maxPixels: 1e13
});
print("dict", dict);
}
min();
输出结果:
- ee.Reducer.max()
解释:获取输入的最大值。如果输入是数值列表,获取数值的最大值;如果是影像集合,获取所有匹配波段的每一个像素的最大值;如果是单张影像,获取波段中的像素最大值。
例子:
function max() {
//ee.Reducer.max
//list
var a = ee.List([2,1,3,4,5]);
print("max", a.reduce(ee.Reducer.max()));
//image collection
var l8Col = l8.filterDate("2018-6-1", "2018-8-1")
.filterBounds(roi)
.map(ee.Algorithms.Landsat.simpleCloudScore)
.map(function(image){
image = image.updateMask(image.select("cloud").lte(20));
return image;
})
.map(function(image) {
return image.addBands(image.normalizedDifference(["B5", "B4"]).rename("NDVI"));
})
.select("NDVI");
var image = l8Col.reduce(ee.Reducer.max());
print(image);
var visParam = {
min: -0.2,
max: 0.8,
palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
'3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
Map.addLayer(image.clip(roi), visParam, "NDVI_max");
//image
var firImg = ee.Image(l8Col.first());
var dict = firImg.reduceRegion({
reducer:ee.Reducer.max(),
geometry: roi,
scale: 30,
maxPixels: 1e13
});
print("dict is", dict);
}
max();
输出结果:
- ee.Reducer.minMax()
解释:获取输入的最小值和最大值,如果输入是数值列表,获取数值的最小值和最大值;如果是影像集合,获取所有匹配波段的每一个像素的最小值和最大值;如果是单张影像,获取波段中的像素最小值和最大值。
例子:
function minMax() {
//ee.Reducer.minMax
//list
var a = ee.List([2,1,3,4,5]);
print("minMax", a.reduce(ee.Reducer.minMax()));
//image collection
var l8Col = l8.filterDate("2018-6-1", "2018-8-1")
.filterBounds(roi)
.map(ee.Algorithms.Landsat.simpleCloudScore)
.map(function(image){
image = image.updateMask(image.select("cloud").lte(20));
return image;
})
.map(function(image) {
return image.addBands(image.normalizedDifference(["B5", "B4"]).rename("NDVI"));
})
.select("NDVI");
var image = l8Col.reduce(ee.Reducer.minMax());
print(image);
var visParam = {
min: -0.2,
max: 0.8,
palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
'3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
Map.addLayer(image.select("NDVI_min").clip(roi), visParam, "NDVI_min");
Map.addLayer(image.select("NDVI_max").clip(roi), visParam, "NDVI_max");
//image
var dict = img.reduceRegion({
reducer: ee.Reducer.minMax(),
geometry: roi,
scale: 30,
maxPixels: 1e13
});
print("dict", dict);
}
minMax();
输出结果:
- ee.Reducer.mode()
解释:获取输入的众数。
例子:
function mode() {
//ee.Reducer.mode
//list
var a = ee.List([2,1,3,3,5]);
print("mode", a.reduce(ee.Reducer.mode()));
//image
var dict = img.reduceRegion({
reducer: ee.Reducer.mode(),
geometry: roi,
scale: 30,
maxPixels: 1e13
});
print("dict", dict);
}
mode();
输出结果:
- ee.Reducer.mean()
解释:获取输入的均值。
例子:
function mean() {
//ee.Reducer.mean
//list
var a = ee.List([2,1,3,4,5]);
print("mean", a.reduce(ee.Reducer.mean()));
//image collection
var l8Col = l8.filterDate("2018-6-1", "2018-8-1")
.filterBounds(roi)
.map(ee.Algorithms.Landsat.simpleCloudScore)
.map(function(image){
image = image.updateMask(image.select("cloud").lte(20));
return image;
})
.map(function(image) {
return image.addBands(image.normalizedDifference(["B5", "B4"]).rename("NDVI"));
})
.select("NDVI");
var image = l8Col.reduce(ee.Reducer.mean());
print(image);
var visParam = {
min: -0.2,
max: 0.8,
palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
'3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
Map.addLayer(image.clip(roi), visParam, "NDVI_mean");
//image
var dict = img.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: roi,
scale: 30,
maxPixels: 1e13
});
print("dict", dict);
}
mean();
输出结果