【GEE笔记2】数据整合Reducer/遍历循环.map

15 篇文章 18 订阅

Reducer是GEE中按照时间、空间、波段等进行整合数据的方法;类似于从部分到整体。

ee.Reducer()可以指定数据整合的方式,如:max\min\mean\etal。

  • 时间:imageCollection.reduce()
  • 空间:image.reduceRegion() ; image.reduceNeighborhood()
  • 波段:image.reduce()
  • Feature Collection 的属性:Feature Collection.reduceColumns()

以计算NDVI数值并添加至影像合集为例

具体需求:
为一个影像集合添加NDVI波段,同时计算每一景影像上roi的NDVI均值

var mean = ndvi.reduceRegion({  
   reducer: ee.Reducer.mean(),  
   geometry: roi,   
   scale: 30  
});  
print("reduceRegion value is: ", mean); 

map遍历循环

  • map:用的最多,执行效率最快,相当于“并行执行任务”,能用 map,就用 map,但是函数里一般不能用 print,Map,toDrive 等方法

  • for、while:就是基本的循环结构语句,但是在GEE里很少用,基本用 map 替代,因为是顺序执行代码,效率太慢

  • iterate:“迭代”,顺序执行,每次执行都在前面执行的结果上继续执行,很遗憾,这次的例子没有体现“迭代”的意思

  • evaluate:主要用来异步导出和显示,加快速度,一般没有返回值,结合 for 和 map 一起用,这里的 map 里可以有 print,Map,toDrive 方法

完整代码:
roi是我自己画的
在这里插入图片描述

var roi = ee.FeatureCollection(geometry);  
Map.addLayer(roi, {color: "red"}, "roi"); // 显示roi 
Map.centerObject(roi, 9); // 以roi为中心,缩放等级9
// 筛选影像 
var Col = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA")  
              .filterBounds(roi)  
              .filterDate("2022-1-1", "2022-7-1")  
              // 循环遍历影像集合,为每景影像计算并添加一个NDVI波段
              .map(function(image){  
                var ndvi = image.normalizedDifference(["B5", "B4"])  
                                .rename("NDVI");  
                return image.addBands(ndvi);  
              })  
              // 选择NDVI波段用于后续计算
              .select("NDVI")  
              // 循环遍历影像集合,计算每景影像roi的NDVI均值,并赋为新的属性字段“ndvi”
              .map(function(image) {  
                var dict = image.reduceRegion({  
                 reducer: ee.Reducer.mean(),  
                 geometry: roi,  
                 scale: 30  
                });
                var ndvi = ee.Number(dict.get("NDVI"));  
                image = image.set("ndvi", ndvi);  
                return image;  
              });  
// 可视化参数,加载显示新的影像集合,使用first(),返回集合的第一个非空元素,即第一景影像
print("Col", Col);  
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(Col.first().clip(roi), visParam, "Col");  

结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vigo*GIS_RS

来瓶可乐~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值