SERVIR-WA / GALUP

Ghana Land Use Project
BSD 3-Clause "New" or "Revised" License
38 stars 22 forks source link

Module 4 exercises [Mansour Mahamane] #403

Open MM-202 opened 2 years ago

MM-202 commented 2 years ago

WS2_M4E1_Template.docx

JuliePeeling commented 2 years ago

Hi Mansour,

I see your error for the program. Did you import the same asset you used initially? However, we thank you for your submission and acknowledge your hard work on this module.

JuliePeeling commented 2 years ago

Additionally, please feel free to ask your question during the workshop meeting today.

MM-202 commented 2 years ago

Dear all, Yes I use the same asset you used initially and I have this error. But yesterday I didn't have this message. All are fine with the different methods used for classification. I think that I input it (same asset you used initially) again today that mean two time it is the probleme and I try to delete it but it is not possible Best regards

Dr. Mansour Mahamane

Expert Données et Science / Centre Régional AGRHYMET/CILSS

Enseignant Chercheur / Université de Diffa

425, Boulevard de l'Université, Rive Droite

BP: 11011 Niamey/Niger

Skype : mmahamane2008

On Mon, Dec 6, 2021 at 4:03 PM JuliePeeling @.***> wrote:

Hi Mansour,

I see your error for the program. Did you import the same asset you used initially? However, we thank you for your submission and acknowledge your hard work on this module.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SERVIR-WA/GALUP/issues/403#issuecomment-986858385, or unsubscribe https://github.com/notifications/unsubscribe-auth/AUNYK5R57L7CWBOWT3JO6NTUPTGEPANCNFSM5JOZZCTQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

JuliePeeling commented 2 years ago

Dear Mansour,

If the issue is that the file has been input twice, it may help to go to a new GEE code editor and paste the script in again, and reload the asset only once. Please let me know if this helps or if there are still issues. We will also continue trying to figure out where the error could be stemming from.

Best, Julie

JuliePeeling commented 2 years ago

Here is the script: // Note: table comes from the shapefile given to you from the UF team // ... geometry is drawn by you. // Note: Make sure the geometry covers the points in the classification table

/ ############################### DEFAULTS ############################### /

// REGION OF INTEREST var REG_GH = geometry;

// var label = 'LCODE'; // This is the field containing the land cover class coded as a number.

// SET IMAGE SOURCES var IMG_L5 = 'LANDSAT/LT05/C01/T1_SR'; // FOR 2000 - 2012 var IMG_L7 = 'LANDSAT/LE07/C01/T1_SR'; // FOR 2000 - 2012 var IMG_L8 = 'LANDSAT/LC08/C01/T1_SR'; // FOR 2017 - Present

// SET IMAGE ATTRIBUTES var YEAR1 = 2019; // Note: we keep this the same as we have data from just one year. var YEAR2 = 2019;

// SET DATES OF INTEREST var ST_DATE = YEAR1+'-01-01'; // Note, the variable YEAR is defined above var EN_DATE = YEAR2+'-12-31'; // Note, the variable YEAR is defined above

/ ############################### DEFINE FUNCTIONS ############################### /

// RENAMING BANDS [This is a 'helper function' that will allow us to work across all Landsat functions, see in-class discussion] // This function gets us images for out start and end dates, clips them to the region, applies cloud masks, and renames bands. // ...Notice that this is exactly the same as for exercise 1, just a few more lines to help regularize band names.

var getLSAT = function(imgColl,REG_GH,stDate,enDate) { var IMG_SR=ee.ImageCollection(imgColl) .filterDate(stDate, enDate) // Filter images to dates we require .filterBounds(REG_GH) // Filter image footprints by region .map(function(image){return image.clip(REG_GH)}) // Clip images to region .map(cloudMask) // Mask clouds using the 'cloudMask' function // NEW: Rename bands to harmonize across sensors .select(['B1','B2','B3','B4','B5','B6','B7','pixel_qa']); // Note: These are standard band names in all Landsat products var bNames = ['blu','grn','red','nir','sw1','t1','sw2','pixel_qa']; // ... we create 'new' band names for Landsat 5 and 7 if (imgColl == 'LANDSAT/LC08/C01/T1_SR') // ... if we're looking at Landsat 8 though { bNames = ['ubl','blu','grn','red','nir','sw1','sw2','pixel_qa']; // ... we add in the corresponding new names (note ultra-blue, and changes in the thermal and swir2 bands) } var IMG_RN=IMG_SR.select(['B1','B2','B3','B4','B5','B6','B7','pixel_qa'],bNames); // ... we finally extract the only ones we want and rename them to the new names. return IMG_RN.select(['blu','grn','red','nir','sw1','sw2','pixel_qa']); // Return the image collection with the renamed bands };

// MASKING CLOUDS var cloudMask = function(image) { var qa = image.select('pixel_qa'); var cloud = qa.bitwiseAnd(1 << 5) .and(qa.bitwiseAnd(1 << 7)) .or(qa.bitwiseAnd(1 << 3)); var mask2 = image.mask().reduce(ee.Reducer.min()); return image.updateMask(cloud.not()).updateMask(mask2); };

// GET INDICES (see other indices at the end of the script) var getNDVI = function(image){ var ind = image.expression('(nir-red)/(nir+red)',{'nir':image.select('nir'),'red':image.select('red')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getEVI = function(image){ var ind = image.expression('2.5 ((NIR - Red) / (NIR + 6.0 Red - 7.5 * Blue + 1))', {'NIR': image.select('nir'),'Red': image.select('red'),'Blue': image.select('blu')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getMSAVI = function(image){ var ind = image.expression('MSAVI = (1/2)(2(NIR+1)-sqrt((2*NIR+1)*2-8(NIR-Red)))',{'NIR': image.select('nir'),'Red': image.select('red')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getSAVI = function(image){ var ind = image.expression('SAVI = ((NIR - Red) / (NIR + Red + 0.5)) * (1 + 0.5)',{'NIR': image.select('nir'),'Red': image.select('red')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getVARI = function(image){ var ind = image.expression('VARI = (Green - Red)/ (Green + Red - Blue)',{'Green': image.select('grn'),'Red': image.select('red'),'Blue': image.select('blu') }); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getNDSI = function(image){ var ind = image.expression('NDSI = (Green - SWIR) / (Green + SWIR)',{'Green': image.select('grn'),'SWIR': image.select('sw1')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getMSI = function(image){ var ind = image.expression('MSI = (NIR - SWIR) / (NIR+ SWIR)',{'NIR': image.select('nir'),'SWIR': image.select('sw1')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

/ ############################### PROCESS ############################### /

// LET US GET ALL SATELLITE DATA THAT IS AVAILABLE

// var IMG_L5 = 'LANDSAT/LT05/C01/T1_SR'; // FOR 2000 - 2012 // For reference from above // var IMG_L7 = 'LANDSAT/LE07/C01/T1_SR'; // FOR 2000 - 2012 // var IMG_L8 = 'LANDSAT/LC08/C01/T1_SR'; // FOR 2017 - Present

var IMG_LT5 = getLSAT(IMG_L5, REG_GH, ST_DATE, EN_DATE); // Landsat 5 (See details in last exercise) var IMG_LT7 = getLSAT(IMG_L7, REG_GH, ST_DATE, EN_DATE); // Landsat 7 (See details in last exercise) var IMG_LT8 = getLSAT(IMG_L8, REG_GH, ST_DATE, EN_DATE); // Landsat 8 (See details in last exercise)

// COMBINE ALL IMAGES INTO ONE STACK

var IMG_LTX = IMG_LT5.merge(IMG_LT7); // First, merge L5 and L7 into one... var IMG_LTX = IMG_LTX.merge(IMG_LT8); // Then, merge L8 into this one var IMG_LTX = IMG_LTX.sort('system:time_start'); print('Landsat collection for this model'); // Check total number of images available print(IMG_LTX); var LTX_MED = IMG_LTX.median().select(['blu','grn','red','nir','sw1','sw2']);// Get median of all bands

// GENERATE INDEX STACKS var IMG_IND = IMG_LTX.map(getNDVI).median(); // Generate stack of NDVIs, take median var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getEVI).median()); // Generate stack of EVIs, take median, add to median NDVI as band var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getMSI).median()); // ...so on and so forth, var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getSAVI).median()); var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getMSAVI).median()); var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getVARI).median());

/ ############################### CLASSIFY ############################### / var table = table2; var label='LCODE2';

// add a random column (by default named 'random'), will contain random numbers between 0-1 table = table.randomColumn(); // split in a training (80%) and validation (20%) var train_samp = table.filter(ee.Filter.gt('random',0.2)); // 80% training var test_samp = table.filter(ee.Filter.lte('random',0.2)); // 20% testing

// Select the image you want to classify with //var IMG_CLS = IMG_IND; var IMG_CLS = LTX_MED;

// SAMPLE FROM GROUND-TRUTH LOCATIONS var training = IMG_CLS.sampleRegions({ collection: train_samp, properties: [label], scale: 30 });

print('Training dataset'); print(training);

var testing = IMG_CLS.sampleRegions({ collection: test_samp, properties: [label], scale: 30 }); print('Testing dataset'); print(testing);

// BUILD CLASSIFIER (see Classifier in the Docs pane on the left) //var classifier = ee.Classifier.minimumDistance().train(training,label); //var classifier = ee.Classifier.libsvm().train(training,label); //var classifier = ee.Classifier.smileCart().train(training,label); var classifier = ee.Classifier.smileRandomForest(10).train(training,label);

// Get a confusion matrix representing resubstitution accuracy. var trainAccuracy = classifier.confusionMatrix(); print('Resubstitution error matrix: ', trainAccuracy); // Training accuracy matrix print('Training overall accuracy: ', trainAccuracy.accuracy()); // Training accuracy

// Overlay the points on the imagery to get training. var classified = IMG_CLS.classify(classifier,'Classified'); // Classify the input imagery.

// VALIDATE var testclass = testing.classify(classifier,'Classified'); // Apply the classifier on the testing data. print(testclass); var testAccuracy = testclass.errorMatrix(label, 'Classified'); // Compute confusion matrix print('Validation error matrix: ', testAccuracy); // Testing confusion matrix print('Validation overall accuracy: ', testAccuracy.accuracy()); // Validation accuracy

/ ############################### VISUALIZE ############################### /

// Visualization parameters are now common for Landsat 5, 7, and 8 var visParams = { bands: ['nir', 'red', 'grn'], min: 0, //Value to map to 0 max: 3000, //Value to map to 255 gamma: 1.4, //gamma correction factor controls the brightness };

var visNDVI = { min: -0.2, //Value to map to 0 max: 1.0, //Value to map to 255 palette: ['blue', 'white', 'green'], };

/ var palette = [ 'FFFFFF', //0 Nodata? 'FFFF33', //1 Agriculture 'CCCCCC', //2 Barren '006633', //3 Forest 'CC0000', //4 Urban '0000CC', //5 Water ]; /

var palette1 = [ 'FFFFFF', // 0 Nodata? '9aa4a6', // 1 Bare 'fbe839', // 2 Cropland 'e5071d', // 3 Built up '0c8000', // 4 Forest 'a3d06c', // 5 Herbaceous 'b6ab08', // 6 Shrub '030edb', // 7 Water ];

var palette2 = [ 'FFFFFF', // 0 Nodata? 'BEC5C6',//Bare_Bare soil '9AA4A6',//Bare_Rocky land 'C5C4B3',//Bare_Sandy area 'FBE839',//Cropland_Agriculture 'E5D005',//Cropland_Agriculture in shallows and recession 'C4B204',//Cropland_Cropland and fallow with oil palm 'C7A309',//Cropland_Irrigated agriculture 'AB0515',//Developed_Open mine 'E5071D',//Developed_Settlements '546113',//Forest_Degraded forest '0C8000',//Forest_Forest '1E625C',//Forest_Gallery and riparian forest '2B8D84',//Forest_Mangrove '10AC00',//Forest_Plantation '18FE00',//Forest_Swamp forest 'CAE4AA',//Herbaceous_Bowe 'A3D06C',//Herbaceous_Herbaceous savanna '7DB43A',//Herbaceous_Steppe 'FCF7B2',//Shrub_Sahelian shortgrass savana 'F6D238',//Shrub_Savanna 'EFF509',//Shrub_Shrubland 'CDD208',//Shrub_Thicket 'A19607',//Shrub_Woodland '030EDB',//Water bodies_Water bodies '0199DD',//Water bodies_Wetland floodplain ];

Map.centerObject(REG_GH, 9); //Center the map at the region of interest Map.addLayer(table,{},'Sampling ponits'); // Add sampling shapefile to the map Map.addLayer(IMG_LTX.median(),visParams,'Landsat'); // Add image to the map //Map.addLayer(classified,{min: 0, max: 7, palette: palette1},'Land cover 1'); Map.addLayer(classified,{min: 0, max: 25, palette: palette2},'Land cover 2');

MM-202 commented 2 years ago

Thanks I will try it after the meeting Thanks for your support

Dr. Mansour Mahamane

Expert Données et Science / Centre Régional AGRHYMET/CILSS

Enseignant Chercheur / Université de Diffa

425, Boulevard de l'Université, Rive Droite

BP: 11011 Niamey/Niger

Skype : mmahamane2008

On Mon, Dec 6, 2021 at 4:20 PM JuliePeeling @.***> wrote:

Here is the script: // Note: table comes from the shapefile given to you from the UF team // ... geometry is drawn by you. // Note: Make sure the geometry covers the points in the classification table

/ ############################### DEFAULTS ############################### /

// REGION OF INTEREST var REG_GH = geometry;

// var label = 'LCODE'; // This is the field containing the land cover class coded as a number.

// SET IMAGE SOURCES var IMG_L5 = 'LANDSAT/LT05/C01/T1_SR'; // FOR 2000 - 2012 var IMG_L7 = 'LANDSAT/LE07/C01/T1_SR'; // FOR 2000 - 2012 var IMG_L8 = 'LANDSAT/LC08/C01/T1_SR'; // FOR 2017 - Present

// SET IMAGE ATTRIBUTES var YEAR1 = 2019; // Note: we keep this the same as we have data from just one year. var YEAR2 = 2019;

// SET DATES OF INTEREST var ST_DATE = YEAR1+'-01-01'; // Note, the variable YEAR is defined above var EN_DATE = YEAR2+'-12-31'; // Note, the variable YEAR is defined above

/ ############################### DEFINE FUNCTIONS ############################### /

// RENAMING BANDS [This is a 'helper function' that will allow us to work across all Landsat functions, see in-class discussion] // This function gets us images for out start and end dates, clips them to the region, applies cloud masks, and renames bands. // ...Notice that this is exactly the same as for exercise 1, just a few more lines to help regularize band names.

var getLSAT = function(imgColl,REG_GH,stDate,enDate) { var IMG_SR=ee.ImageCollection(imgColl) .filterDate(stDate, enDate) // Filter images to dates we require .filterBounds(REG_GH) // Filter image footprints by region .map(function(image){return image.clip(REG_GH)}) // Clip images to region .map(cloudMask) // Mask clouds using the 'cloudMask' function // NEW: Rename bands to harmonize across sensors .select(['B1','B2','B3','B4','B5','B6','B7','pixel_qa']); // Note: These are standard band names in all Landsat products var bNames = ['blu','grn','red','nir','sw1','t1','sw2','pixel_qa']; // ... we create 'new' band names for Landsat 5 and 7 if (imgColl == 'LANDSAT/LC08/C01/T1_SR') // ... if we're looking at Landsat 8 though { bNames = ['ubl','blu','grn','red','nir','sw1','sw2','pixel_qa']; // ... we add in the corresponding new names (note ultra-blue, and changes in the thermal and swir2 bands) } var IMG_RN=IMG_SR.select(['B1','B2','B3','B4','B5','B6','B7','pixel_qa'],bNames); // ... we finally extract the only ones we want and rename them to the new names. return IMG_RN.select(['blu','grn','red','nir','sw1','sw2','pixel_qa']); // Return the image collection with the renamed bands };

// MASKING CLOUDS var cloudMask = function(image) { var qa = image.select('pixel_qa'); var cloud = qa.bitwiseAnd(1 << 5) .and(qa.bitwiseAnd(1 << 7)) .or(qa.bitwiseAnd(1 << 3)); var mask2 = image.mask().reduce(ee.Reducer.min()); return image.updateMask(cloud.not()).updateMask(mask2); };

// GET INDICES (see other indices at the end of the script) var getNDVI = function(image){ var ind = image.expression('(nir-red)/(nir+red)',{'nir':image.select('nir'),'red':image.select('red')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getEVI = function(image){ var ind = image.expression('2.5 ((NIR - Red) / (NIR + 6.0 Red - 7.5 * Blue + 1))', {'NIR': image.select('nir'),'Red': image.select('red'),'Blue': image.select('blu')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getMSAVI = function(image){ var ind = image.expression('MSAVI = (1/2)(2(NIR+1)-sqrt((2*NIR+1)*2-8(NIR-Red)))',{'NIR': image.select('nir'),'Red': image.select('red')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getSAVI = function(image){ var ind = image.expression('SAVI = ((NIR - Red) / (NIR + Red + 0.5)) * (1

  • 0.5)',{'NIR': image.select('nir'),'Red': image.select('red')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getVARI = function(image){ var ind = image.expression('VARI = (Green - Red)/ (Green + Red - Blue)',{'Green': image.select('grn'),'Red': image.select('red'),'Blue': image.select('blu') }); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getNDSI = function(image){ var ind = image.expression('NDSI = (Green - SWIR) / (Green + SWIR)',{'Green': image.select('grn'),'SWIR': image.select('sw1')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

var getMSI = function(image){ var ind = image.expression('MSI = (NIR - SWIR) / (NIR+ SWIR)',{'NIR': image.select('nir'),'SWIR': image.select('sw1')}); return ind.copyProperties({source: image,properties: ['system:time_start']}); };

/ ############################### PROCESS ############################### /

// LET US GET ALL SATELLITE DATA THAT IS AVAILABLE

// var IMG_L5 = 'LANDSAT/LT05/C01/T1_SR'; // FOR 2000 - 2012 // For reference from above // var IMG_L7 = 'LANDSAT/LE07/C01/T1_SR'; // FOR 2000 - 2012 // var IMG_L8 = 'LANDSAT/LC08/C01/T1_SR'; // FOR 2017 - Present

var IMG_LT5 = getLSAT(IMG_L5, REG_GH, ST_DATE, EN_DATE); // Landsat 5 (See details in last exercise) var IMG_LT7 = getLSAT(IMG_L7, REG_GH, ST_DATE, EN_DATE); // Landsat 7 (See details in last exercise) var IMG_LT8 = getLSAT(IMG_L8, REG_GH, ST_DATE, EN_DATE); // Landsat 8 (See details in last exercise)

// COMBINE ALL IMAGES INTO ONE STACK

var IMG_LTX = IMG_LT5.merge(IMG_LT7); // First, merge L5 and L7 into one... var IMG_LTX = IMG_LTX.merge(IMG_LT8); // Then, merge L8 into this one var IMG_LTX = IMG_LTX.sort('system:time_start'); print('Landsat collection for this model'); // Check total number of images available print(IMG_LTX); var LTX_MED = IMG_LTX.median().select(['blu','grn','red','nir','sw1','sw2']);// Get median of all bands

// GENERATE INDEX STACKS var IMG_IND = IMG_LTX.map(getNDVI).median(); // Generate stack of NDVIs, take median var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getEVI).median()); // Generate stack of EVIs, take median, add to median NDVI as band var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getMSI).median()); // ...so on and so forth, var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getSAVI).median()); var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getMSAVI).median()); var IMG_IND = IMG_IND.addBands(IMG_LTX.map(getVARI).median());

/ ############################### CLASSIFY ############################### / var table = table2; var label='LCODE2';

// add a random column (by default named 'random'), will contain random numbers between 0-1 table = table.randomColumn(); // split in a training (80%) and validation (20%) var train_samp = table.filter(ee.Filter.gt('random',0.2)); // 80% training var test_samp = table.filter(ee.Filter.lte('random',0.2)); // 20% testing

// Select the image you want to classify with //var IMG_CLS = IMG_IND; var IMG_CLS = LTX_MED;

// SAMPLE FROM GROUND-TRUTH LOCATIONS var training = IMG_CLS.sampleRegions({ collection: train_samp, properties: [label], scale: 30 });

print('Training dataset'); print(training);

var testing = IMG_CLS.sampleRegions({ collection: test_samp, properties: [label], scale: 30 }); print('Testing dataset'); print(testing);

// BUILD CLASSIFIER (see Classifier in the Docs pane on the left) //var classifier = ee.Classifier.minimumDistance().train(training,label); //var classifier = ee.Classifier.libsvm().train(training,label); //var classifier = ee.Classifier.smileCart().train(training,label); var classifier = ee.Classifier.smileRandomForest(10).train(training,label);

// Get a confusion matrix representing resubstitution accuracy. var trainAccuracy = classifier.confusionMatrix(); print('Resubstitution error matrix: ', trainAccuracy); // Training accuracy matrix print('Training overall accuracy: ', trainAccuracy.accuracy()); // Training accuracy

// Overlay the points on the imagery to get training. var classified = IMG_CLS.classify(classifier,'Classified'); // Classify the input imagery.

// VALIDATE var testclass = testing.classify(classifier,'Classified'); // Apply the classifier on the testing data. print(testclass); var testAccuracy = testclass.errorMatrix(label, 'Classified'); // Compute confusion matrix print('Validation error matrix: ', testAccuracy); // Testing confusion matrix print('Validation overall accuracy: ', testAccuracy.accuracy()); // Validation accuracy

/ ############################### VISUALIZE ############################### /

// Visualization parameters are now common for Landsat 5, 7, and 8 var visParams = { bands: ['nir', 'red', 'grn'], min: 0, //Value to map to 0 max: 3000, //Value to map to 255 gamma: 1.4, //gamma correction factor controls the brightness };

var visNDVI = { min: -0.2, //Value to map to 0 max: 1.0, //Value to map to 255 palette: ['blue', 'white', 'green'], };

/ var palette = [ 'FFFFFF', //0 Nodata? 'FFFF33', //1 Agriculture 'CCCCCC', //2 Barren '006633', //3 Forest 'CC0000', //4 Urban '0000CC', //5 Water ]; /

var palette1 = [ 'FFFFFF', // 0 Nodata? '9aa4a6', // 1 Bare 'fbe839', // 2 Cropland 'e5071d', // 3 Built up '0c8000', // 4 Forest 'a3d06c', // 5 Herbaceous 'b6ab08', // 6 Shrub '030edb', // 7 Water ];

var palette2 = [ 'FFFFFF', // 0 Nodata? 'BEC5C6',//Bare_Bare soil '9AA4A6',//Bare_Rocky land 'C5C4B3',//Bare_Sandy area 'FBE839',//Cropland_Agriculture 'E5D005',//Cropland_Agriculture in shallows and recession 'C4B204',//Cropland_Cropland and fallow with oil palm 'C7A309',//Cropland_Irrigated agriculture 'AB0515',//Developed_Open mine 'E5071D',//Developed_Settlements '546113',//Forest_Degraded forest '0C8000',//Forest_Forest '1E625C',//Forest_Gallery and riparian forest '2B8D84',//Forest_Mangrove '10AC00',//Forest_Plantation '18FE00',//Forest_Swamp forest 'CAE4AA',//Herbaceous_Bowe 'A3D06C',//Herbaceous_Herbaceous savanna '7DB43A',//Herbaceous_Steppe 'FCF7B2',//Shrub_Sahelian shortgrass savana 'F6D238',//Shrub_Savanna 'EFF509',//Shrub_Shrubland 'CDD208',//Shrub_Thicket 'A19607',//Shrub_Woodland '030EDB',//Water bodies_Water bodies '0199DD',//Water bodies_Wetland floodplain ];

Map.centerObject(REG_GH, 9); //Center the map at the region of interest Map.addLayer(table,{},'Sampling ponits'); // Add sampling shapefile to the map Map.addLayer(IMG_LTX.median(),visParams,'Landsat'); // Add image to the map //Map.addLayer(classified,{min: 0, max: 7, palette: palette1},'Land cover 1'); Map.addLayer(classified,{min: 0, max: 25, palette: palette2},'Land cover 2');

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SERVIR-WA/GALUP/issues/403#issuecomment-986875539, or unsubscribe https://github.com/notifications/unsubscribe-auth/AUNYK5XXRB2OD7PFO5QYUELUPTICXANCNFSM5JOZZCTQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.