如何在地球引擎中找到某个区域(由polgon包围)中的所有湖泊?

时间:2019-06-19 06:23:45

标签: google-earth google-earth-engine

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

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

我创建了以下代码: Earth Engine Code

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

我应该如何去做?

1 个答案:

答案 0 :(得分:0)

关于评论中张贴的代码,我回答了这个问题,希望该问题会用评论中张贴的代码进行更新。

过滤:确定。

仅是评论,我不会用名称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 mask,因此必须使用NDWI band进行计算。

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