问题陈述是给出了一个感兴趣的区域。
我需要使用NDWI水体索引来查找多边形边界区域中的所有湖泊,这些湖泊的高度超过1500米。然后在Google Earth Engine中以表格形式显示从1984年到2018年两年一次的湖面水面积的变化。我使用了陆地卫星5号和7号数据。
我创建了以下代码:Earth Engine Code
现在我需要在多边形标记区域中以如下格式显示结果:-行-( 1号湖,2号湖,3号湖...n)湖柱-(1984年的表面积,1986年的表面积,....2018)
我该怎么做呢?
发布于 2019-07-01 11:11:14
关于评论中发布的代码,我回答了这个问题,希望这个问题会随着评论中发布的代码而更新。
过滤: ok。
这只是一个注释,我不会将图像集合变量命名为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 mask:您必须选择elevation
频段:
var elevMask = elevation.select('elevation').gt(1500)
此遮罩图像将具有高度大于1500的1和不大于1500的0。
应用掩码:在这一部分中,你必须记住地球引擎使用函数式编程,所以对象是不可变的,这意味着你不能使用方法更新对象的状态,你必须捕获你正在调用的方法的输出。这里你需要ndwi掩码,所以你必须用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!
当你将其添加到地图中时,Visualizing:会生成一个马赛克,这就是你会看到的。请记住这一点,以便进一步处理。
var ndwiViz = {bands: ['NDWI'], min: 0.5, max: 1, palette: ['00FFFF', '0000FF']};
Map.addLayer(maskedImg, ndwiViz, 'Landsat 5 masked collection');
https://stackoverflow.com/questions/56661259
复制相似问题