GEE学习 part8—“核心工具”Reducer函数学习(附完整代码)
GEE中Reducer函数是对多个影像或多层图像进行运算一种用于执行数值运算的工具特别是在处理图像和集合时。包括图层求“或”求“和”求最大、最小值、求均值、求众数等。Reducer 的主要功能1.压缩数据对像素值进行聚合或压缩以生成单一数值(分析NDVI、土地覆盖变化等)2.多种运算GEE 中内置了多种 Reducer用于执行不同的数值操作例如ee.Reducer.mean()计算平均值。ee.Reducer.sum()计算总和。ee.Reducer.max()找到最大值。ee.Reducer.min()找到最小值。ee.Reducer.stdDev()计算标准差。ee.Reducer.count()计数。3.区域操作最常使用的情境是通过 reduceRegion() 方法对特定区域的像素值执行运算以生成该区域内的统计信息。使用场景1.时间序列分析例如从时间序列的卫星影像中计算每年的平均 NDVI 值使用 ee.Reducer.mean() 来聚合像素值。2.图像组合使用 ee.ImageCollection 对图像集合进行归约对所有图像的数据进行汇总和分析。3.区域统计当用户想要了解特定地理区域的图像属性如特定土地覆盖类型的变化时可以使用不同的 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/C02/T1_RT); 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(); // --------以上为所有Reducer用法的公共部分用于设置区域、时间等数据根据自己需要例子1ee.Reducer.first()—取第一个用Landsat 8 卫星数据并生成并提取第一幅图像NDVI值一些具体的代码不懂的地方可以复制到AI中进行询问代码function first() { //ee.Reducer.first() //list var a ee.List([1,2,3,4,5]); //返回列表的第一个元素 1 print(result, a.reduce(ee.Reducer.first())); //image var firImg ee.Image(l8.reduce(ee.Reducer.first())); //返回集合中每一景影像的波段第一个像素同时重命名波段名称 print(firImg, firImg); } first();例子2最小值--Reducer.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,筛选特定区域的最小值NDVI并打印 var dict img.reduceRegion({ reducer: ee.Reducer.min(), geometry: roi, scale: 30, maxPixels: 1e13 }); print(dict, dict); } min();展示一个小结果其他就不展示了可以自己复制代码运行例子3最大值其实改两个字母就OK哈哈哈例子4ee.Reducer.minMax()获取输入的最小值和最大值以上两个例子的代码链接https://code.earthengine.google.com/1e1b9297576776ec29476d2c5d2d3e00下面打印的结果清清楚楚哦例子5平均值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();