To get the maximum ndvi
you could use qualityMosaic
function. To be able to know which image ID the pixel comes from is more complicated because as it is not a numerical property, you have to encode it some how. This is how I'd do it, but it's just one way, there could be other ways (may be easier)
l7 = ee.ImageCollection("LANDSAT/LE07/C01/T1_SR")
l7 = l7.filterDate("1999-01-01", "2018-04-30").filterBounds(geometry)
.map(function(image) {
var ndvi=image.expression('float(b("B4") - b("B3")) / (b("B4") + b("B3"))').rename('ndvi');
ndvi = ndvi.multiply(100)
return image.addBands(ndvi);
})
// add date band
.map(function(img){
var millis = img.date().millis()
var days = millis.divide(1000).divide(60).divide(60).divide(24).toInt() // 86400000
var dateband = ee.Image.constant(days).rename('date')
return img.addBands(dateband)
})
// add PATH ROW band
.map(function(img){
var path = ee.Number(img.get('WRS_PATH')).toInt()
var row = ee.Number(img.get('WRS_ROW')).toInt()
var pathi = ee.Image.constant(path).rename('path')
var rowi = ee.Image.constant(row).rename('row')
return img.addBands(pathi).addBands(rowi)
})
// cast to Int
.map(function(img){
return img.toUint16()
})
// function to get the image ID from date, path and row
var get_id = function(date, path, row) {
var d = ee.Date(ee.Number(date).multiply(86400000))
var i = l7.filterDate(d, d.advance(1, 'day'))
.filterMetadata('WRS_PATH', 'equals', path)
.filterMetadata('WRS_ROW', 'equals', row)
return ee.Image(i.first()).id()
}
// apply qualityMosaic
var mosaic = l7.qualityMosaic('ndvi')
Map.addLayer(mosaic, {bands:['ndvi'], min:0, max:80})
// function to be able to print the image ID when clicking on the Map over the image
var click = function(coords) {
var lon = coords.lon
var lat = coords.lat
var p = ee.Geometry.Point([lon, lat])
var values = mosaic.reduceRegion(ee.Reducer.first(), p, 30)
var date = get_id(values.get('date'), values.get('path'), values.get('row'))
print('ID on point', p, date)
}
Map.onClick(click)
In order to remove particular bands from an image, you can take the image's bandNames
, filter
that list to only the bands you want, and select
those bands from the image:
function removeMaxCorr(glcmImage) {
return glcmImage.select(
glcmImage.bandNames().filter(
ee.Filter.stringEndsWith('item', '_maxcorr').not()));
}
Map.addLayer(removeMaxCorr(myImage.glcmTexture()));
(The pseudo-property name 'item' is the name used to refer to the value of a List
item that isn't a feature with its own properties — here, a string.).
Best Answer
.reduceRegion works if the geometry is reasonably small.
https://code.earthengine.google.com/8d71b1f03571c4510be90381928f3925 (I drew a polygon region.)