Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // imports
- var l8Reflectance = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA"),
- l8Collection = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT"),
- Copiapo = /* color: #0b4a8b */ee.Geometry.Point([-70.740966796875, -27.790491224830877]),
- DEM = ee.Image("USGS/SRTMGL1_003"),
- cloudVisParam = {"opacity":1,"bands":["B1"],"min":1,"palette": ["3888ff","ff0000"]};
- var borders = ee.FeatureCollection('ft:1Li-jBAaNhqKaW2WxAPJspU9mvZp4qTtBIuHqOkpB').geometry();
- var digitalElevation = ee.Image("USGS/SRTMGL1_003");
- //filtering image collection to region of choice
- var chileanLayers = l8Collection.filterBounds(borders);
- //using the simpleCloudScore function to find areas with clouds
- var cloudLayers = chileanLayers.map(function(image) {
- var cloud = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud');
- return(cloud);
- })
- //selecting images with a cloud score of 60 or more and adding them into 1 image
- var cloudScoredLayers = cloudLayers.map(function(image) {
- var cloudScore = image.select(['cloud']).gte(60);
- return(cloudScore);
- })
- var cloudSum = cloudScoredLayers.sum();
- //using a different method to create a cloud image by using high reflectance
- //values
- var maxReflectance = l8Reflectance.map(function(image) {
- var cloud1Reflectance = image.select('B1');
- var cloud2Reflectance = image.select('B2');
- var cloud3Reflectance = image.select('B3');
- var cloud4Reflectance = image.select('B4');
- var cloud5Reflectance = image.select('B5');
- var possibleClouds = cloud1Reflectance.add(cloud2Reflectance)
- .add(cloud3Reflectance).add(cloud4Reflectance).add(cloud5Reflectance);
- var onlyClouds = possibleClouds.gte(4);
- return(onlyClouds);
- });
- var cloudReflectance = maxReflectance.sum();
- //creating a mask of altitude for the altitude range I want
- var DEM = DEM.clip(borders);
- var desiredMinAltitude = DEM.gte(650);
- var desiredMaxAltitude = DEM.gte(900);
- var desiredAltitude = desiredMinAltitude.subtract(desiredMaxAltitude);
- var desiredAltitude = desiredAltitude.mask(desiredAltitude);
- //creating 2 binary images for both methods used to calculate clouds, then
- //adding them creating an image where a value of 1 shows clouds in either of
- //the methods, and a value of 2 shows clouds found in both methods
- var cloudsAltitude = cloudReflectance.gte(3).mask(desiredAltitude);
- var cloudSumAltitude = cloudSum.gte(75).mask(desiredAltitude);
- var cloudMean = cloudsAltitude.add(cloudSumAltitude);
- var cloudsMasked = cloudMean.eq(0).not();
- var cloudResult = cloudMean.mask(cloudsMasked);
- //centres image and applies visualisation parameters
- Map.centerObject(Copiapo, 7);
- Map.addLayer(cloudResult, cloudVisParam, "Cloud Layer");
- //with this I tried to calculate the area of all cloud pixels in the
- //cloudResult image, this is where the problem begins
- var area = ee.Image.pixelArea().mask(cloudResult);
- var cloudArea = area.multiply(cloudResult.gte(1));
- var cloudAreaSqkm = cloudArea.divide(1000000);
- var totalCloudArea = cloudAreaSqkm.reduceRegion({
- reducer: ee.Reducer.sum(),
- geometry: borders,
- scale: 1000,
- maxPixels: 1e9
- });
- print("Total Cloud Area: ", totalCloudArea.get('area'), 'sq. km');
- //this calculates the area of a smaller altitude range than the one before,
- //this also causes me some problems
- var optimalMinAltitude = DEM.gte(700);
- var optimalMaxAltitude = DEM.gte(800);
- var optimalAltitude = optimalMinAltitude.subtract(optimalMaxAltitude);
- var optimalAltitude = optimalAltitude.mask(optimalAltitude);
- var optimalClouds = cloudResult.mask(optimalAltitude);
- var optimalCloudArea = area.multiply(optimalClouds.gte(1));
- var optimalCloudAreaSqkm = optimalCloudArea.divide(1000000);
- var optimalTotalCloudArea = optimalCloudAreaSqkm.reduceRegion({
- reducer: ee.Reducer.sum(),
- geometry: borders,
- scale: 1000,
- maxPixels: 1e9
- });
- print("Optimal Cloud Area:", optimalTotalCloudArea.get('area'), 'sq. km');
Add Comment
Please, Sign In to add comment