script DNBR

Translator

 //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