Zonas de drenaje con r.drain y GRASS Script en Python

En el artículo precedente se calculó la longitud del terreno (λ de la RUSLE), según enfoque CALSITE, mediante un script de Python con GRASS Script y empleando como insumo un ráster DEM para un área de 225 Has. Cada cálculo individual involucraba la determinación del área acumulada de drenaje a través de un ráster que representaba una línea de flujo, que posteriormente se eliminaba, y que había sido generada con el módulo r.drain.

Dependiendo de las flags usadas con el comando, los values de cada celda del ráster de salida (línea de flujo) serán todos unos, los valores del DEM, los registros acumulados del DEM o el orden secuencial de celdas en la dirección del flujo. En el artículo precedente se usó la primera (valor default) porque es la que permitía una salida más compacta y por ende más fácil de manipular a la hora de obtener el área acumulada de drenaje. Sin embargo, usando la flag de orden secuencial, se podría pensar que ésta podría segregar zonas de drenaje si se combinaban todos los ráster individuales de líneas de flujo en uno sólo. Con ello en mente se produjo el siguiente código python para efectuar tal procedimiento:

#!/usr/bin/env python
# -*- coding: utf-8

import grass.script as grass
import numpy as np
from os import system
from math import *

system("clear")

grass.use_temp_region()

n=1102509.80067218
w=637580.4826546
e=644265.82562661
s=1097029.37416606

grass.run_command("g.region", 
					n=n, 
					w=w, 
					s=s, 
					e=e, 
					align="N09W068_UTM19N_canoa")

grass.run_command("v.in.region",
					output="vector",
					quiet="true",
					overwrite="true")

grass.run_command("v.to.rast",
					input="vector",
					output="vector_raster",
					value="-1",
					use="val",
					quiet="true",
					overwrite="true")

grass.run_command("g.remove",
					vect="vector",
					quiet="true")

x=640096.00
y=1100717.00

rns=30.61054474
rew=30.61054474

n = y
w = x

rows=int(raw_input("número de filas = ? "))
columns=int(raw_input("número de columnas = ? "))

print "Espere...\n"

for i in range(rows):
	
	print "Procesando fila " + str(i+1) 	
	
	for j in range(columns):

		p1=str(x)+","+str(y)

		map="flujo"+str(i)+str(j)
		map2=map+"_temp"
		
		grass.run_command("r.drain", 
							flags="n",
							input="N09W068_UTM19N_canoa", 
							output=map, 
							coordinate=p1,
							quiet="true",
							overwrite="true")

		grass.mapcalc ("$map2=if(isnull($map),0,$map)", 
						map=map, 
						map2=map2,
						quiet="true")

		grass.mapcalc ("region=if($map2 != 0, $map2, vector_raster)", 
						map2=map2,
						quiet="true")

		grass.mapcalc ("vector_raster=region",
						quiet="true")

		grass.run_command("g.remove",
							rast="region",
							quiet="true")

		grass.run_command("g.remove",
							rast=map,
							quiet="true")

		grass.run_command("g.remove",
							rast=map2,
							quiet="true")

		x += rew
	
	x=w
	y -= rns	

grass.mapcalc("vector_raster2=if(vector_raster==-1,null(),vector_raster)")

Los resultados de ejecución del mismo están en la siguiente imagen para salidas con 20×20, 30×30, 40×40 y 50×50 filas x columnas.

Los colores azul intenso corresponden a values de 1 y tienden hacia tonos más claros al hacerse cada vez mayores para, finalmente, adquirir tonalidades rojizas a valores relativamente elevados de celdas involucradas en las líneas de flujo. Aunque es posible delimitar de manera aproximada las zonas de drenaje no es factible hacerlo con precisión. Por ello se pensará en otra solución.

About these ads
Esta entrada fue publicada en Código Python, GRASS, SIG, Software Libre. Guarda el enlace permanente.

3 respuestas a Zonas de drenaje con r.drain y GRASS Script en Python

  1. Pingback: Zonas de drenaje con r.drain y GRASS Script en Python | #Geoprocessamento em Foco | Scoop.it

  2. Pingback: Corrección de problemas de drenaje con r.fill.dir de GRASS |

  3. Pingback: Delimitación de áreas de drenaje, mediante un script de python en GRASS, con base en los sumideros |

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s