9 votos

¿Cómo reclasificar un raster flotante?

Tengo tres rásteres que representan la distancia (en metros) a determinadas cosas (paradas de autobús, parques, bibliotecas). Me gustaría reclasificar estos rásteres para que obtengan valores enteros en función de los siguientes criterios:

between 1 - 1000 = 1
between 1000 - 2000 = 2
between 2000 - 3000 = 3
between 3000 - 4000 = 4
between 4000 - 5000 = 5
between 5000 - 6000 = 6
between 6000 - 7000 = 7
between 7000 - 8000 = 8
between 8000 - 9000 = 9
9000 and above = 10

Sé cómo hacer esto en Spatial Analyst, pero no tengo una licencia y estoy tratando de utilizar herramientas de código abierto. He intentado utilizar r.reclasificación y seguí los consejos en esta pregunta pero la trama de entrada debe ser una trama entera. Por el momento, mis rásteres de distancia son flotantes.

También he probado a utilizar el herramienta de reclasificación en el Entorno de modelización geoespacial pero la trama de entrada también debe ser una trama de números enteros.

También he intentado utilizar la calculadora de rasterización en QGIS siguiendo este ejemplo pero parece que eso sólo funciona con un único criterio y no con 10.

Me he tirado de los pelos intentando convertir los rasters a enteros, pero no lo consigo.

¿Alguien sabe cómo reclasificar un ráster flotante o convertir un ráster flotante en un ráster entero?

Tenga en cuenta que el objetivo final de esto será realizar una superposición ponderada. Eventualmente, puedo tener Spatial Analyst en ArcGIS para hacer esto, pero me gustaría saber cómo hacerlo utilizando herramientas de código abierto.

Gracias.

15voto

Steven Parkes Puntos 625

Sí, r.reclass es para reclasificar rásters temáticos, como el Corine Land Cover. Funcionará para sus datos, pero la rutina convertirá los números flotantes en enteros antes de hacer la reclasificación, por lo que podría llevar a resultados inesperados.

Lo que se busca es r.recode

Las reglas se definen en muchos formatos, uno de los cuales es el siguiente:

antiguo_bajo:antiguo_alto:nuevo_valor (es decir, nuevo_alto == nuevo_bajo)

Así que, basándose en su pregunta, las normas deberían ser algo parecido a esto:

rules.txt

1:1000:1
1000:2000:2
2000:3000:3
3000:4000:4
4000:5000:5
5000:6000:6
6000:7000:7
7000:8000:8
8000:9000:9
9000:*:10

Así que el comando debería ser así:

r.recode input=oldmap output=newmap rules="/path/to/rules.txt"

A continuación, puede utilizar el r.reclass para el módulo newmap que has creado.

6voto

user70568 Puntos 6

A estas alturas es probable que lo hayáis resuelto, pero para los que aún lo estéis buscando, podéis hacerlo con la calculadora de raster en QGIS. El ejemplo que Fezter se refiere, es, por desgracia, muy simplificado. Digamos que usted tiene valores de 1 a 360 que desea reclasificar en 3 clases, entonces la sintaxis debe ser así:

("raster" < 90) * 1 + (("raster" >= 5) AND ("raster" < 180)) * 2 + ("raster" >= 180) * 3

Esto creará una trama con los valores 1, 2 y 3. Todo lo demás recibirá un valor sin datos.

Obsérvese que al utilizar los operadores a > , < , >= , <= El * (estrella) cambia su significado habitual de multiplicación por el de "sustituir por". Fíjate también en la sintaxis para especificar un rango con el operador AND. Una vez que haya entendido esta lógica es bastante fácil reclasificar en QGIS sin recurrir a engorrosos cambios de formato u otras soluciones.

4voto

SteveBurkett Puntos 960

Así es como se puede hacer esto con R:

library(raster)
r <- raster('your file name')
tab <- cbind(0:9 * 1000, c(1:9,Inf)*1000, 1:10)
x <- reclassify(r, tab, filename='output.tif', datatype='INT2S')

0voto

Florin Puntos 673

Pruebe el programa de código abierto GridMap Reclass en SourceForge: http://sourceforge.net/projects/mapgridreclass/

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