script DNBR
//VERSION=3 //Datos dNBR [-2,2]
//modificado de: https://custom-scripts.sentinel-hub.com/custom-scripts/sentinel-2/burned_area/
function setup() {
return {
input: [{
bands: [
"B02",
"B03",
"B04",
"B05",
"B8A",
"B12"
]
}],
output: { bands: 3 },
mosaicking: "ORBIT"
}
}
function stretch(val, min, max) {return (val - min) / (max - min);}
function filterScenes (scenes, inputMetadata) {
return scenes.filter(function (scene) {
// selección de fechas pre y post incendio
var allowedDates = ["2022-06-10","2022-06-28"];
var sceneDateStr = dateformat(scene.date);
if (allowedDates.indexOf(sceneDateStr)!= -1) return true;
else return false;
});
}
// Calculo del NBR
function calcNBR(sample) {
var denom = sample.B8A+sample.B12;
var nbrval = ((denom!=0) ? (sample.B8A-sample.B12) / denom : 0.0);
return nbrval;
}
function dateformat(d){
var dd = d.getDate();
var mm = d.getMonth()+1;
var yyyy = d.getFullYear();
if(dd<10){dd='0'+dd}
if(mm<10){mm='0'+mm}
var isodate = yyyy+'-'+mm+'-'+dd;
return isodate;
}
function evaluatePixel(samples,scenes) {
var nbrpre = 0;
var nbrpost = 0;
// NBR imagen pre incendio
nbrpre = calcNBR(samples[1]);
// NBR imagen post incendio
nbrpost = calcNBR(samples[0]);
// dNBR
var dnbr = nbrpre - nbrpost;
// Seleccion visualizacion capa salida
var stretchMin = 0.05;
var stretchMax = 1.00;
var NaturalColors = [
stretch(2.8 * samples[0].B04 + 0.1 * samples[0].B05, stretchMin, stretchMax),
stretch(2.8 * samples[0].B03 + 0.15 * samples[0].B8A, stretchMin, stretchMax),
stretch(2.8 * samples[0].B02, stretchMin, stretchMax)
];
var burnModerate = [
stretch(2.8 * samples[0].B04 + 0.1 * samples[0].B05, stretchMin, stretchMax) + 0.5,
stretch(2.8 * samples[0].B03 + 0.15 * samples[0].B8A, stretchMin, stretchMax) + 0.5,
stretch(2.8 * samples[0].B02, stretchMin, stretchMax)
];
var burnSevere = [
stretch(2.8 * samples[0].B04 + 0.1 * samples[0].B05, stretchMin, stretchMax) + 0.5,
stretch(2.8 * samples[0].B03 + 0.15 * samples[0].B8A, stretchMin, stretchMax),
stretch(2.8 * samples[0].B02, stretchMin, stretchMax)
];
var burnExtreme = [
stretch(2.8 * samples[0].B04, stretchMin, stretchMax),
stretch(2.8 * samples[0].B03, stretchMin, stretchMax),
stretch(2.8 * samples[0].B02, stretchMin, stretchMax) + 0.5
];
// Definir tres niveles de severidad
if (dnbr < 0.27) {
return NaturalColors; // Baja severidad
} else if (dnbr < 0.5) {
return burnModerate; // Moderada severidad
} else if (dnbr < 1.0) {
return burnSevere; // Alta severidad
} else {
return burnExtreme; // Extrema severidad
}
}
Comentarios
Publicar un comentario