我在 Javascript 中迭代时遇到问题,希望有人能帮助我。
我在 Google Earth Engine 上编写了一个代码,将 NDWI 水面罩应用于 Landsat 集合。该代码过滤 landsat 集合,估计 de NDWI,并根据平均 NDWI 掩码剪辑集合。虽然,我想对我的图像集合应用动态水蒙版,所以我必须为每个图像使用不同的 NDWI 蒙版,而不是平均 NDWI 蒙版。
问题:我不知道如何创建一个循环来通过其各自的 NDWI 水面罩而不是平均 NDWI 水面罩来掩盖集合的每个图像。
提前致谢:)
var geometry = general geometry
var start_date = ee.Date.fromYMD(2010, 10, 1);
var end_date = ee.Date.fromYMD(2015, 10, 31);
// LANDSAT 8
var col_landsat_8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR")
.filterDate(start_date, end_date)
.select([1,2,3,4,5,6,7,10], ['BB','BG','BR','BNIR','BSWIR_1','BSWIR_2','BT','pixel_qa'])
.filterMetadata('CLOUD_COVER', 'less_than', 10)
.filterBounds(geometry);
var f_cloudMask_SR = function(image) {
// If the cloud bit (5) is set and the cloud confidence (7) // is high or the cloud shadow bit is set (3), then it's a bad pixel.
var cloudShadowBitMask = (1 << 3);
var cloudsBitMask = (1 << 5);
var cloudConfidence = (1 << 7);
// Get the pixel QA band.
var qa = image.select('pixel_qa');
// Both flags should be set to zero, indicating clear conditions.
var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0).and(qa.bitwiseAnd(cloudsBitMask).eq(0)).and(qa.bitwiseAnd(cloudConfidence).eq(0));
return image.updateMask(mask);
};
//
col_landsat_8 = col_landsat_8.map(f_cloudMask_SR);
var col_landsat_tot = col_landsat_8
//
print('Imagens selecionadas:', col_landsat_tot);
var makeNDWI = function(image)
{
var ndwi = image.expression(
'(GREEN - NIR) / (GREEN + NIR)',
{
'NIR': image.select('BNIR'),
'GREEN': image.select('BG')
}).rename('NDWI');
return image.addBands(ndwi);
};
var ndwi = col_landsat_tot.map(makeNDWI);
// reduce the image collection to one image by summing the rasters
var ndwi = ndwi.select(['NDWI']);
var ndwi_mean = ndwi.reduce(ee.Reducer.mean());
//var vis_indveg = {min: 0, max: 1, palette: ['SandyBrown', 'Blue']};
//Map.addLayer(ndwi, vis_indveg , 'NDWI');
var waterMask = ndwi_mean
//Define function
var f_waterMask_SR_G1 = function(image) {
var mask2 = waterMask.select(0);
return image.updateMask(mask2);};
//
var col_landsat_tot_water_mask = col_landsat_tot.map(f_waterMask_SR_G1);
//LANDSAT 8 TRUE COLOR COMPOSITION
var img_mean = col_landsat_tot_water_mask.mean();
var vis_composition = {min: 0,max:2000,bands: ['BR', 'BG', 'BB'],gamma: 2};
Map.addLayer(img_mean, vis_composition, 'Landsat');
https://code.earthengine.google.com/80fa1eca029e02f169f385f30820dba1