5 votos

¿Cómo hacer bucles en celdas raster con la consola python en QGIS?

Soy nuevo aquí y principiante con python. Estoy buscando una solución a mi problema durante algunas horas, pero ahora usted es mi última oportunidad ... Estoy usando la consola de python (2.7.5) en QGIS (2.4.0). ¿Hay alguna solución para hacer bucles en celdas raster? Me gustaría crear un raster en el que cada celda de valor dependerá de la posición (número de columna y fila) en el raster.

Estoy buscando algo como este código python en Arcgis (lo encontré aquí: ¿Cómo obtener las coordenadas X Y y el valor de celda de cada píxel en un raster utilizando Python? )

for row in range(0,height):
     for col in range(0,width):
        #now you have access to single array of values for one cell location

Gracias.

4voto

GreyCat Puntos 146

Arcpy utilizan el Matriz Numpy (oculto para los usuarios) como PyGGIS que utiliza el formato Python GDAL módulo.

 provider = raster.dataProvider()
 # path the original file 
 filePath = str(provider.dataSourceUri())
 # open the original file
 from osgeo import gdal 
 raster_or = gdal.Open(filePath)
 # create a numpy array
 numpy_array = raster_or.ReadAsArray()
 # shape of the array
 print numpy_array.shape
 (60, 100) # my example
 # compare with
 print raster.height(),raster.width()
(60, 100)
 width,height = numpy_array.shape # or width = raster.width and height = raster.height()
 # and 
 for row in range(0,width):
     for col in range(0,height):
         print row,col,numpy_array[row,col]

Leer toda la imagen a la vez es bastante eficaz, pero no lo mejor. La forma más eficiente de acceder a los datos rasterizados es por bloques (mira los cursos de Chris Garrard Lectura de datos ráster con GDAL )

0 votos

No estás explicando realmente lo que la variable dataSet es. ¿Cuál es su tipo?

1 votos

Lo siento, es un error, corregido

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