如有研究需要数据,请与QQ1807232;或微信扫码添加客服咨询

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();

 

输出结果