5 votos

¿Exportar raster a imagen con escritura independiente en QGIS?

Utilizando la secuencia de comandos independiente cargué una capa, y ahora tengo que exportar como una imagen. Véase el código de abajo:

 from qgis.core import *
 from qgis.utils import *
 from qgis.gui import *
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 QgsApplication.setPrefixPath("C:\OSGeo4W\apps\qgis", True)
 qgs = QgsApplication([], True)
 qgs.initQgis()
 rasterpath = "E:/MODIS DATA/2016/15-10-2016/TIRUNELVELI.tif"
 lyr = QgsRasterLayer(rasterpath, "TIRUNELVELI")
 QgsMapLayerRegistry.instance().addMapLayer(lyr)

Revisé el post de QGis Salvar a Raster como Imagen, pero el código es ejecutado usando la consola de Python. Si puedo usar el mismo código se muestra un error:

NoneType objeto no tiene ningún atributo 'clon'.

Código actualizado después de Comentar

from qgis.core import *
from qgis.utils import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *
rasterpath = "E:/MODIS/TIRUNELVELI.tif"
layer = QgsRasterLayer(rasterpath, "TIRUNELVELI")
QgsMapLayerRegistry.instance().addMapLayer(layer)
uri = "E:/MODIS/newStyleqgis.qml"
layer.loadNamedStyle(uri)
extent = layer.extent()
width, height = layer.width(), layer.height()
renderer = layer.renderer()
provider=layer.dataProvider()
crs = layer.crs().toWkt()
pipe = QgsRasterPipe()
pipe.set(provider.clone())
pipe.set(renderer.clone())
file_writer = QgsRasterFileWriter('E:/MODIS/abcd.tif')
file_writer.writeRaster(pipe,
                       width,
                       height,
                       extent,
                       layer.crs())

actualizado, pero muestra un error como se muestra : enter image description here

2voto

Geoffrey Puntos 228

De Python: Error de Atributo - 'NoneType' el objeto no tiene ningún atributo 'algo':

NoneType significa que, en lugar de una instancia de cualquier Clase o el Objeto usted piensa que usted está trabajando, usted tiene Ninguno. Que generalmente significa que una cesión o una llamada de función, arriba de error o devueltos un resultado inesperado.

El error es probablemente dada por la ruta de la capa porque no hay un espacio en blanco.

Por ejemplo, trate de añadir un carácter de subrayado para el nombre de la ruta (que usted necesita para hacer el cambio en la carpeta del sistema):

rasterpath = "E:/MODIS_DATA/2016/15-10-2016/TIRUNELVELI.tif"

o cambiar la carpeta de entrada.

2voto

Mue Puntos 2469

Junto con lo HowToInQGIS mencionado, creo que también se debe incluir el QgsApplication de la clase en el código actualizado. Poniendo esto junto con su código funciona (tenga en cuenta que usted puede necesitar para escapar de sus barras diagonales inversas "C:\OSGeo4W\apps\qgis" a algo como "C:/OSGeo4W64/apps/qgis"):.

Aquí está el código completo que trabajó para mí:

from qgis.core import *
from qgis.utils import *
from qgis.gui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *

QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
app = QApplication([], True)
QgsApplication.initQgis()

rasterpath = "C:/Users/You/Desktop/New folder/vir.tif"
layer = QgsRasterLayer(rasterpath, "TIRUNELVELI")
QgsMapLayerRegistry.instance().addMapLayer(layer)
uri = "C:/Users/You/Desktop/style.qml"
layer.loadNamedStyle(uri)
extent = layer.extent()
width, height = layer.width(), layer.height()
renderer = layer.renderer()
provider=layer.dataProvider()
crs = layer.crs().toWkt()
pipe = QgsRasterPipe()
pipe.set(provider.clone())
pipe.set(renderer.clone())
file_writer = QgsRasterFileWriter('C:/Users/You/Desktop/result.tif')
file_writer.writeRaster(pipe,
                       width,
                       height,
                       extent,
                       layer.crs())

Result

Nota: el 0 al final lo que indica que fue correctamente escrito.

Desktop image

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