2 votos

Proceso por lotes de QGIS de recorte de raster por extensiones usando el bucle For desde la consola de Python

Estoy recortando un raster por extensiones desde la consola de python en QGIS utilizando el siguiente código :

from processing.tools import *  
general.runalg("gdalogr:cliprasterbyextent","E:/Sreeraj/Task/Split/Extract_agri.tif","","-180.0,0.0,0.0,90.0",5,4,75,6,1,False,0,False,"","E:/Sreeraj/Task/Split/output/1.tif")

Aquí, estoy dando extensiones como longitud_mínima=180,0, latitud_mínima=0,0, longitud_máxima=0,0, y latitud_máxima=90,0.

Ahora, quiero hacer un recorte usando processing.runalg en la consola de QGIS python, donde usaré un bucle for para recortar 4 archivos .tif de salida como un proceso por lotes.

Para hacer este proceso de recorte por lotes, probé el código dado a continuación:

output_location = "E:/Sreeraj/Task/Split/output/"
output file = 1
for long in range(-180,0,5):
  longmax = long + 5
  for lat in range(0,90,5):
    latmax = lat + 5
    extents = "long,lat,longmax,latmax" 
    output = str(output_location) + str(output file) + ".tif" 
    general.runalg("gdalogr:cliprasterbyextent","E:/Sreeraj/Task Global Data CONVERSION/Split/Extract_agri.TIF","",extents,5,4,75,6,1,False,0,False,"",output)
    output file = output file + 1

Desafortunadamente, estoy recibiendo un mensaje de error como :

"Error: Wrong parameter value: extents" 

En lugar de dar directamente los valores de extensión como "-180,0,0,0,90,0" dentro de general.runalg(), cómo puedo dar "extents" (si extents = "-180,0,0,90").

Creo que la cuestión es con :

extents = "long,lat,longmax,latmax"  

Cuando hago esto :

extents = "-180.0,0.0,0.0,90.0"
general.runalg("gdalogr:cliprasterbyextent","E:/Sreeraj/Task Global Data CONVERSION/Split/Extract_agri.TIF","",extents,5,4,75,6,1,False,0,False,"",output) 

entonces el código está funcionando.

Pero, si me gusta esto :

long = -180.0 
lat = 0.0
longmax = 0.0 
latmax = 90.0  
extents = "long,lat,longmax,latmax"
general.runalg("gdalogr:cliprasterbyextent","E:/Sreeraj/Task Global Data CONVERSION/Split/Extract_agri.TIF","",extents,5,4,75,6,1,False,0,False,"",output)  

entonces estoy recibiendo el error.

Así que, claramente, el problema es con :

extents = "longmin,longmax,latmin,latmax"  

Por favor, ayúdenme a resolver este error.

1voto

Mue Puntos 2469

Pones tus variables dentro de comillas simples, lo que significa que lo que esté dentro de esas comillas se leerá tal y como está escrito. Así que si escribes extents aparecería como..:

'long,lat,longmax,latmax'

Elimina las comillas y deberías obtener algo así:

(-180.0, 0.0, 0.0, 90.0)

Esto se acercaría más a lo que buscas, pero no estoy seguro de si las tuplas se aceptan como parámetro para la extensión (las tuplas son una secuencia de objetos dentro de paréntesis).


Además, los parámetros de extensión vienen dados por (o al menos la última vez que lo comprobé):

xmin, xmax, ymin, ymax

Así que en tu caso sería:

long, longmax, lat, latmax

Y si quieres ver esto como un parámetro de extensión, podrías usar

extents = "%f,%f,%f,%f"% (long, longmax, lat, latmax)

Así que su código final podría ser como ( _nota que cambio long a lon ya que el primero es utilizado por Python; y output file a output_file_ ):

output_location = "E:/Sreeraj/Task/Split/output/"
output_file = 1
for lon in range(-180,0,5):
    longmax = lon + 5
    for lat in range(0,90,5):
        latmax = lat + 5
        extents = "%f,%f,%f,%f"% (lon, longmax, lat, latmax)
        output = str(output_location) + str(output_file) + ".tif" 
        general.runalg("gdalogr:cliprasterbyextent","E:/Sreeraj/Task Global Data CONVERSION/Split/Extract_agri.TIF","",extents,5,4,75,6,1,False,0,False,"",output)
        output_file = output_file + 1

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