5 votos

Por qué QgsRasterCalculator accidentes de Qgis inesperadamente?

Estoy luchando para resumir algunos de los rásteres de uso de QgsRasterCalculator. Cuando el paso de "calc.processCalculation()" se ejecuta, QGIS se bloquea con un error de tiempo de ejecución (R6025 - llamada de función virtual pura) o un vertedero.

Tengo una lista de ráster rutas generadas en un bucle for mirando como la siguiente. Por favor, dime ¿qué hago mal y cómo podría yo hacer el trabajo...

Aquí está mi código:

from qgis.core import *
from PyQt4.QtCore import *
from qgis.analysis import QgsRasterCalculator, QgsRasterCalculatorEntry

s1 = "E:\rcalc\OUTPUT11.sdat"
s2 = "E:\rcalc\OUTPUT22.sdat"
s3 = "E:\rcalc\OUTPUT33.sdat"
list = [s1,s2,s3]

entries = []
formula = ""

for i in range(0, len(list)):
    raster = list[i]
    resp = QgsRasterLayer(raster)
    rast1 = QgsRasterCalculatorEntry()
    rast1.raster = resp
    rast1.ref = "rast"+str(i+1)
    rast1.bandNumber = 1
    entries.append(rast1)
    rast1 = None
    resp = None

    if(i == len(list)-1):
        formula = formula + 'rast'+str(i+1)  
    else:
        formula = formula + 'rast'+str(i+1)+' + '

resp = QgsRasterLayer(list[0])

calc = QgsRasterCalculator( formula, "E:\output.tif", 'GTiff', resp.extent(), resp.width(), resp.height(), entries )
calc.processCalculation()

2voto

genesis Puntos 285

He encontrado la respuesta: Cuando reemplacé

resp = QgsRasterLayer(raster) 

con

resp = processing.getObject(raster)

La calculadora que funcionaba bien.

Además, la referencia debe tener carácter @ a contar las entradas, por lo que la línea de

rast1.ref = "rast"+str(i+1)

convertido en

rast1.ref = "rast@"+str(i+1)

y la fórmula será

rast@1 + rast@2 + rast@3 +...

Cuando he usado la fórmula

rast1 + rast2 + rast3

el resultado fue un mapa de bits con un valor constante de 6 (1+2+3). Espero que mi respuesta va a ser útil.

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