9 votos

¿Cómo puedo especificar el SRC de una capa raster en pyqgis?

Yo la manipulación de los datos ráster netcdf de la QGIS consola de python. Los metadatos de mi archivo netcdf no proporciona el sistema de Referencia. Sin embargo, yo sé que es 'EPSG:4326' Estoy escribiendo una secuencia de comandos de python para realizar tareas de forma automática, no quiero que la interacción con el usuario.

Estoy usando los siguientes comandos :

fileName = "/path/to/raster/file.tif"
fileInfo = QFileInfo(fileName)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(fileName, baseName)`

Pero el QGIS windows me pidió las Coordenadas del sistema de referencia de esta capa. He intentado especifica el crs mientras carga con algo como

rlayer = QgsRasterLayer(filename=fileName, basename=baseName, crs='EPSG:4326')

Pero QGIS se bloquea.

¿Tiene usted alguna idea ? Es posible especificar un archivo qml donde la crs se define ?

Gracias por su ayuda

12voto

talonx Puntos 262

Al parecer, el nombre de parámetro de la notación está causando el bloqueo. No sé si esto debería funcionar. De todos modos puede establecer el CRS con QgsMapLayer.setCrs() después de que usted se ha asegurado de que el crs símbolo del sistema está desactivado:

de PyQt4.QtCore de importación QFileInfo,QSettings
de qgis.núcleo de importación QgsRasterLayer, QgsCoordinateReferenceSystem

s = QSettings()
oldValidation = s.valor( "/Proyecciones/defaultBehaviour", "useGlobal" ).toString()
s.setValue( "/Proyecciones/defaultBehaviour", "useGlobal" )

nombre de archivo = "/ruta/a/raster/archivo.tif"
fileInfo = QFileInfo(nombre de archivo)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(nombre de archivo, nombre)
rlayer.setCrs( QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId) )

s.setValue( "/Proyecciones/defaultBehaviour", oldValidation )

5voto

Yada Puntos 9489

Creo que otra manera de resolver este problema es establecer la crs directamente a los archivos almacenados en el disco antes de la creación de la capa de referencia en PyQGIS mediante el QgsRasterLayer constructor. Sería evitar que QGIS ventana preguntó por las Coordenadas del Sistema de Referencia.Para probar mi sugerencia he usado una capa raster que fue creado sin crs (out_pyqgis.tif) y en el QGIS Consola de Python he asignado la correspondiente crs para EPSG 4326 mediante este código.

from osgeo import osr, gdal
from gdalconst import *
dataset = gdal.Open('path_to_my_raster/out_pyqgis.tif', GA_Update)
band = dataset.GetRasterBand(1)
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
dataset.SetProjection( srs.ExportToWkt() )
dataset = None

Funcionó como se esperaba. No más pop hasta el CRS de la ventana y el QgsRasterLayer constructor podría ser utilizado en la manera condensada:

rlayer = QgsRasterLayer(fileName, baseName)

4voto

MIMAD Puntos 23

De acuerdo a: http://www.qgis.org/pyqgis-cookbook/loadlayer.html#raster-layers y http://qgis.org/api/classQgsRasterLayer.html#a65b118c0319a090c9efbf259bfebd55f usted proporcionar demasiada información.

El CRS utilizado debe ser el uno de la lona (supongo...).

Y se puede tener como esto:

from qgis.utils import iface
actual_crs = iface.mapCanvas().mapRenderer().destinationCrs()

Si desea cambiar:

from qgis import core
from qgis.utils import iface

if iface.mapCanvas().mapRenderer().hasCrsTransformEnabled():    
    my_crs = core.QgsCoordinateReferenceSystem(4326, core.QgsCoordinateReferenceSystem.EpsgCrsId)
    iface.mapCanvas().mapRenderer().setDestinationCrs(my_crs)

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