I'd like to create a mosaic with minimum cloud cover over an area of interest. I have done this by using the sort function to return the image with minimum 'CLOUD_COVER' value and am happy with the result.
// Find image at point with least cloud cover in the year 2014
// imported // landsat = 'USGS Landsat 8 Raw Scenes (Orthorectified)'
var trueColor= {
bands: ['B4','B3','B2'],
min: 5000,
max: 15000,
};
var point = ee.Geometry.Point([116.64,8.26])
var image = ee.Image(landsat.filterDate('2014-01-01','2014-12-31')
.filterBounds(point).sort('CLOUD_COVER').first());
Map.addLayer(image,trueColor,'True Color Image')
I would like to extend this to a wider area but it seems I cannot use the sort function on an imageCollection in this way. I have tried to use a cloud filter function as detailed in this answer, however the result is extremely cloudy Filter Landsat images base on cloud cover over a region of interest
// Find images within an area with least cloud cover in the year 2014
// imported // landsat = 'USGS Landsat 8 Raw Scenes (Orthorectified)'
var trueColor= {
bands: ['B4','B3','B2'],
min: 5000,
max: 15000,
};
var polygon = ee.Geometry.Polygon([
[[116.64,8.26], [119.41,8.26], [119.41,10.44], [116.64,10.44],[116.64,8.26]]
]);
var collection = ee.ImageCollection(landsat.filterDate('2014-01-01','2014-12-31').filterBounds(polygon));
var withCloudiness = collection.map(function(image) {
var cloud = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud');
var cloudiness = cloud.reduceRegion({
reducer: 'mean',
geometry: polygon,
scale: 30,
maxPixels: 1e9
});
return image.set(cloudiness);
});
var filteredCollection = withCloudiness.filter(ee.Filter.lt('cloud', 10));
Map.addLayer(filteredCollection.mosaic(), trueColor, 'spatial mosaic');
No comments:
Post a Comment