1 votos

Reclasificar los valores ráster con GDAL

Me gustaría reclasificar una trama con el siguiente código:

#RBR reclassification to USGS burn severity values

arr = np.array(RBR_MultiplyBy1000_Int)

level1 = (arr >= -500) & (arr <= -251) #-2 Enhanced Regrowth, high (post-fire)
level2 = (arr >= -250) & (arr <= -101) #-1 Enhanced Regrowth, low (post-fire)
level3 = (arr >= -100) & (arr <= 99) #0 Unburned
level4 = (arr >= 100) & (arr <= 269) #1 Low Severity
level5 = (arr >= 270) & (arr <= 439) #2 Moderate-low Severity
level6 = (arr >= 440) & (arr <= 659) #3 Moderate-high Severity
level7 = (arr >= 660) & (arr <= 1300) #4 High Severity

levels = [level2, level3, level4, level5, level6, level7]
reclass_values = [-1, 0, 1, 2, 3, 4]

RBR_reclassed_arr = np.where(level1,-2, arr)
for level, val in zip(levels, reclass_values):
  RBR_reclassed_arr = np.where(level, val, RBR_reclassed_arr)

Pero cuando la reclasificación está terminada, obtengo los siguientes valores ráster:

enter image description here

Me parece que algunos valores no se reclasifican porque tengo el valor mínimo de -650, normalmente debería ser -2 el valor mínimo.

1voto

D'oh Puntos 1

Bueno, esto debería publicarse como comentario más que como respuesta porque tu pregunta no es realmente clara, pero déjame intentarlo (tristemente no tengo el privilegio de añadir comentarios todavía):

1) Supongo que tu pregunta está relacionada con numpy y no con gdal

2) Suponiendo que tienes -650 como valor mínimo en tu raster (que desde nuestro punto de vista es la variable numpy llamada arr) - no hay ningún nivel que contenga valores tan bajos como -650 (el nivel 1 reasigna valores a partir de -500 y superiores), por lo que queda sin clasificar

El código corregido quedaría así:

import numpy as np

#fake data as we don't have access to your raster/array
arr=np.array([[-650,-400,200],[300,500,900]]) 

level1 = (arr >= -650) & (arr <= -251) #-2 Enhanced Regrowth, high (post-fire)
#level1 changed to include -650

level2 = (arr >= -250) & (arr <= -101) #-1 Enhanced Regrowth, low (post-fire)
level3 = (arr >= -100) & (arr <= 99) #0 Unburned
level4 = (arr >= 100) & (arr <= 269) #1 Low Severity
level5 = (arr >= 270) & (arr <= 439) #2 Moderate-low Severity
level6 = (arr >= 440) & (arr <= 659) #3 Moderate-high Severity
level7 = (arr >= 660) & (arr <= 1300) #4 High Severity

#levels adjusted, so they contain level1.
#this is not strictly problem in previous version of code, but better for clarity
levels = [level1, level2, level3, level4, level5, level6, level7]
#reclass values also adjusted    
reclass_values = [-2,-1, 0, 1, 2, 3, 4]

RBR_reclassed_arr = arr
for level, val in zip(levels, reclass_values):
    RBR_reclassed_arr = np.where(level, val, RBR_reclassed_arr)

La salida:

array([[-2, -2,  1],
       [ 2,  3,  4]])

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X