In the below code I want to put elevation average values in to the list but returns error:
code link: https://code.earthengine.google.com/6337849ec707ae2e229ba4bdb02e5fff
var startDate = '2000-01-01';
var endDate = '2020-01-01';
var maxBound = ee.Image("JRC/GSW1_2/GlobalSurfaceWater")
.select('max_extent').clip(geometry)
.gt(0);
var dem = ee.ImageCollection("JAXA/ALOS/AW3D30/V3_2")
.median()
.clip(geometry)
.select('DSM')
.rename('DEM');
var NDWI = function(img){
var bands = img.select('sur_refl_b04','sur_refl_b02').multiply(0.0001).clip(geometry);
var index = bands.normalizedDifference(['sur_refl_b04','sur_refl_b02']).rename('NDWI')
return index.addBands(dem)
.copyProperties(img,['system:time_start','system:time_end']);
};
var modisNDWI = ee.ImageCollection("MODIS/006/MOD09A1")
.filterDate(startDate,endDate)
.filterBounds(geometry)
.map(NDWI);
print(modisNDWI)
var calcArea = function(img,list){
var thr = img.select('NDWI').gt(0.5).and(maxBound.eq(1));
var mask = thr.updateMask(thr);
var area = mask.multiply(ee.Image.pixelArea());
var totalarea = area.reduceRegion(ee.Reducer.sum(), geometry);
var boundary = mask.reduceToVectors({
geometry: geometry,
scale: 250,
geometryType: 'polygon',
eightConnected: false,
bestEffort: true
});
var demClip = img.select('DEM').clip(boundary);
var eleAve = demClip.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: boundary,
scale: 250
})
return ee.List(list).add(eleAve.get('DEM'));};
var first = ee.List([]);
var AREA = ee.List(modisNDWI.iterate(calcArea, first));
print('elevation average:',AREA);
Best Answer
It's probably a better idea to
map
the function, rather than usingiterate
. The former runs parallel and is much faster. Also, as your 'geometry' is ageometry
object, there's no need to use.reduceToVectors
, which can be computationally expensive.To calculate the elevation of each image in the collection:
In the same function, you can add additional statistics to the image using
.set()
.In case you want to calculate the elevation of just unmasked pixels (in your script you're not, but maybe you want to?), you can use:
To return a list of all calculated mean elevation values use
.aggregate_array()
: