Skip to content

Instantly share code, notes, and snippets.

@OterLabb
Last active February 19, 2022 11:09
Show Gist options
  • Save OterLabb/9c34d1d1e613426db3bb987e3b64290b to your computer and use it in GitHub Desktop.
Save OterLabb/9c34d1d1e613426db3bb987e3b64290b to your computer and use it in GitHub Desktop.
// GEE Script for å hente ut NDVI og SDVI verdier fra punkter
// Eksporterer til .csv fil
// Scriptet må kjøres to ganger, første gangen for å finne antall satelittbilder,
// så skrive inn antallet bilder på linje 70
// Polygon (studie området) heter 'stud_omraade'¨
// Random points heter 'table'
// Importere verktøy for å filtere ut skyer/vann/skygger
// Taken from André Hollstein et al. 2016 (doi:10.3390/rs8080666)
// http://www.mdpi.com/2072-4292/8/8/666/pdf
var cld = require('users/fitoprincipe/geetools:cloud_masks')
// Importere satelittbilder (Søke i toppfeltet), så bytter navn til S2
var S2 = imageCollection
// Finne satelittbilder innenfor dato
.filterDate('2021-08-10', '2021-08-15')
// Filtere utifra studieområadet - finne sateliettbiler innenfor studieområdet
.filterBounds(stud_omraade)
// Lage NDVI som et eget band
var addNDVI = function(image) {
return image.addBands(image.normalizedDifference(['B8', 'B4']).rename('NDVI'));
};
// Legge til NDVI-bandet til S2 (imageCollection)
var S2 = S2.map(addNDVI)
// Lage NDSI som et eget band
var addNDSI = function(image) {
return image.addBands(image.normalizedDifference(['B3', 'B6']).rename('NDSI'));
};
// Legge til NSDI-bandet til S2 (imageCollection)
var S2 = S2.map(addNDSI)
print(S2,'S2 med NDVI/NDSI') // Sjekke data
// Undersøke data så langt
Map.addLayer(table) // Legge til punkter i kartet
Map.setCenter(13.23, 64.46, 10); // Flytte kartet til studieområdet
var test_image = S2.first() // Vi bruker det første bildet i samlingen
print(test_image.getInfo(), 'Test bilde') // Printe informasjon
Map.addLayer(test_image, {bands:['B2', 'B3', 'B4'], min:0, max:3000}, 'Test bilde') // Legge til test bildet i kartet
// Teste maskering av skyer/skygger/vann på test bildet
var masked = cld.hollstein_S2(['cloud', 'shadow', 'water', 'cirrus'])(test_image)
Map.addLayer(masked, {bands:['hollstein'], min:0, max:1, palette: ['#FF0000']}, 'masked') // Røde områder blir med i analysen
// Colour Palette for NDVI
var visNDVI = {
bands: ['NDVI'],
min: -1,
max: 1,
palette: ['blue', 'white', 'green']
};
Map.addLayer(masked, visNDVI, 'NDVI test bilde')
// Filtrere ut skyer/skygger på alle satelittbildene
var count_filter = S2.size(); // Finne antall satelittbilder
print(count_filter, 'Antall satelittbilder')
var listNDVI=S2.toList(count_filter); // Lage en liste over satelittbildene
var newList = ee.List([]); // Lage en tom liste for å legge inn de ferdige satelittbildene
// For loop, som går gjennom hvert satelittbilde og maskerer ut skyer/skygger
for(var i = 0; i < 6; i++){ // Her må tall nr 2 byttes ut med antall satelittbilder i samelingen
var image = ee.Image(listNDVI.get(i));
//print(image);
var image2 = cld.hollstein_S2(['cloud', 'shadow', 'water', 'cirrus'])(image) // Maskere skyer
var image3 = image2.clip(stud_omraade) // Klippe til studieområdet
var image4 = image3.select(['NDVI', 'NDSI']) // Velge ut bare de bandene vi skal ha
//print(image4);
var date = image4.date().format('yyyy-MM-dd').getInfo(); // Lagre datoen
var name_i= 'NDVI_'+i.toString()+'_'+date;
newList = newList.add(image4)
Map.addLayer(image3, visNDVI, name_i) // Legge til i kartet
}
print(newList, 'Ny liste'); // Sjekke nye listen
var newS2 = ee.ImageCollection(newList) // Gjøre om listen til imageCollection
print(newS2, 'Ny ImageCollection') // Sjekke nye imagecollection
// Get ndvi values to table
var mapfunc = function(feat) {
// get feature geometry
var geom = feat.geometry()
// function to iterate over the yearly ImageCollection
// the initial object for the iteration is the feature
var addProp = function(img, f) {
// cast Feature
var newf = ee.Feature(f)
// get date as string
var date = img.date().format()
// extract the value (first) of 'NDVI' in the feature
var value = img.reduceRegion(ee.Reducer.first(), geom, 10).get('NDVI')
// if the value is not null, set the values as a property of the feature. The name of the property will be the date
return ee.Feature(ee.Algorithms.If(value,
newf.set(date, ee.String(value)),
newf.set(date, ee.String('NA'))))
}
var newfeat = ee.Feature(newS2.iterate(addProp, feat))
return newfeat
};
var ndviFt = table.map(mapfunc);
//var newftNDVI = points.map(mapfunc);
print(ndviFt)
// Export
Export.table.toDrive(ndviFt,
"export_Points_ndvi",
"export_Points_ndvi",
"export_Points_ndvi");
// Get NDSI values to table
var mapfunc = function(feat) {
// get feature geometry
var geom = feat.geometry()
// function to iterate over the yearly ImageCollection
// the initial object for the iteration is the feature
var addProp = function(img, f) {
// cast Feature
var newf = ee.Feature(f)
// get date as string
var date = img.date().format()
// extract the value (first) of 'NDVI' in the feature
var value = img.reduceRegion(ee.Reducer.first(), geom, 10).get('NDSI')
// if the value is not null, set the values as a property of the feature. The name of the property will be the date
return ee.Feature(ee.Algorithms.If(value,
newf.set(date, ee.String(value)),
newf.set(date, ee.String('NA'))))
}
var newfeat = ee.Feature(newS2.iterate(addProp, feat))
return newfeat
};
var ndsiFt = table.map(mapfunc);
//var newftNDVI = points.map(mapfunc);
print(ndsiFt)
// Export
Export.table.toDrive(ndsiFt,
"export_Points_ndsi",
"export_Points_ndsi",
"export_Points_ndsi");
// Eksportere raster hvis ønskelig
//var batch = require('users/fitoprincipe/geetools:batch')
//
// batch.Download.ImageCollection.toDrive(newS2, 'test', {
// scale: 10,
// region: stud_omraade
//})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment