0
点赞
收藏
分享

微信扫一扫

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


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:“迭代”,顺序执行,每次执行都在前面执行的结果上继续执行,很遗憾,这次的例子没有体现“迭代”的意思
  • eval(232, 232, 232); background: rgb(249, 249, 249);">

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

    结果:

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


举报

相关推荐

0 条评论