首页 > 解决方案 > 如何在地球引擎中找到一个区域(以 polgon 为界)中的所有湖泊?

问题描述

问题陈述是给出了一个感兴趣的区域。

我需要使用水体的 NDWI 指数找到多边形有界区域中的所有湖泊,这些湖泊的高度超过 1500m。然后在 Google Earth Engine 中以表格形式显示从 1984 年到 2018 年以 2 年为间隔的湖泊地表水面积的变化。我使用了 Landsat 5 和 7 数据。

我创建了以下代码: 地球引擎代码

现在我需要以如下格式在表格结构中显示多边形标记区域中的结果:-行-(Lake 1、Lake 2、Lake 3...Lake n)列-(1984 年的表面积,Surface 1986 年面积,....2018 年)

我该怎么做呢?

标签: google-earthgoogle-earth-engine

解决方案


我就评论中发布的代码回答了这个问题,希望问题会随着评论中发布的代码更新。

过滤:好的。

只是一个评论,我不会用 name 命名图像集合变量img,这让我很困惑,但变量名称取决于你。

var mf = ee.Filter.calendarRange(10, 12, 'month');

var img1 = ee.ImageCollection(l5
            .filterDate('1984-01-01','1999-12-31')
            .filterBounds(roi)
            .filter(mf));

var img2 = ee.ImageCollection(l7
            .filterDate('2000-01-01','2018-12-31')
            .filterBounds(roi)
            .filter(mf));

添加 NDWI:这是您的代码:

var addNDWI = function(image){
  var ndwi = image.normalizedDifference(['B2', 'B4']).rename('NDWI');
  var ndwiMask = ndwi.gte(0.3);
  return image.addBands(ndwi);
};
var image1 = img1.map(addNDWI);
var image2 = img2.map(addNDWI);

您没有保存ndwiMask,因此您将无法在此功能之外使用它。同样,我不会命名它们image,因为它们不是图像而是图像集合。

高程掩码:您必须选择elevation波段:

var elevMask = elevation.select('elevation').gt(1500)

此蒙版图像将具有高程大于 1500 的图像,而没有高程的图像为零。

应用掩码:在这部分你必须记住 Earth Engine 使用函数式编程,所以对象是不可变的,这意味着你不能使用方法更新对象的状态,你必须捕获你正在调用的方法的输出. 这里需要 ndwi 掩码,所以必须用 NDWI 波段计算。

var mask = function(image){
  var ndwiMask = image.select('NDWI').gt(0.3)
  var ndwi_masked = image.updateMask(ndwiMask);
  return ndwi_masked.updateMask(elevMask);
};

var maskedImg = image1.map(mask);  // ImageCollection!
var maskedImg2 = image2.map(mask);  // ImageCollection!

可视化:结果是ImageCollection,当您将其添加到地图时,EE 会制作马赛克,这就是您所看到的。请记住这一点以进行进一步处理。

var ndwiViz = {bands: ['NDWI'], min: 0.5, max: 1, palette: ['00FFFF', '0000FF']};
Map.addLayer(maskedImg, ndwiViz, 'Landsat 5 masked collection');

推荐阅读