Hoy miramos el siguiente apartado sobre PyQGIS, programación Python en QGIS, sobre como cargar capas con PyQGIS. Este apartado es referente al segundo tema del PyQGIS Cookbook «Loading Layers». Si te has perdido los dos post anteriores puedes buscarlos aquí.
Solo voy a poner los ejemplos básicos de como cargar un shape, un archivo csv y una imagen raster, y añadirlos a la vista. En la web podéis encontrar como acceder a más tipos de capas como WMS, WFS, SQL, etc. Por ahora vamos a lo sencillo.
Como cualquier script primero debemos de comenzar por importar la librería de QGIS con la linea:
from qgis.core import *
Ahora si queremos cargar una capa vectorial, indicaremos la capa que queremos y el formato de capa vectorial con el que lo queremos leer que es «ogr», capaz de leer la mayoría de capas vectoriales (layer).
layer = QgsVectorLayer(«C:\gvsig\castilla-leon\embalses.shp», «Embalses OGR» , «ogr»)
Para agregar un fichero del tipo csv como capa, debemos hacerlo de la siguiente manera: primero hay que indicar donde se encuentra el csv, como es un fichero tenemos que indicarlo primero con file:/// y luego la ruta, quedando así: file:///ruta/completa/hasta/fichero.csv sino dará error si no escribirmos el file. Además debemos indicar cual es el delimitador entre palabras, cual es la columna X y la columna Y, cargamos la capa (vlayer) con QgsVectorLayer(). En mi caso se queda así:
uri = «file:///C:/gvsig/tornados.csv?delimiter=%s&xField=%s&yField=%s» % («,», «X», «Y»)
vlayer = QgsVectorLayer(uri, «Tornados CSV», «delimitedtext»)
Para cargar los raster, hay un problema en como lo explica en la página porque si escribes el código como indica da un error de que no encuentra el comando QFileInfo(). Esto sucede porque hay que importar primero las librerías que nos permiten esto. Si queremos seguir trabajando con el raster deberíamos de importar también la librería gdal
from PyQt4.QtCore import *
from PyQt4.QtGui import *
Así que queda de la siguiente manera, el raster de prueba me lo descargue de aquí. Con esto lo que hacemos es indicar donde se encuentra nuestro raster (tif), accedemos a la info del archivo (fileInfo) que QGIS pueda leer, a su nombre (baseName), y cargamos por último la capa raster pasando la información (rlayer)
fileName = «C:\gvsig\donana.tif»
fileInfo = QFileInfo(fileName)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(fileName, baseName)
Y por último agregamos las capas cargadas a nuestro mapa:
QgsMapLayerRegistry.instance().addMapLayer(layer)
QgsMapLayerRegistry.instance().addMapLayer(vlayer)
QgsMapLayerRegistry.instance().addMapLayer(rlayer)
El script final para agregar estás tres capa queda así:
from qgis.core import * from PyQt4.QtCore import * from PyQt4.QtGui import * #Vector layer = QgsVectorLayer("C:\gvsig\castilla-leon\embalses.shp" , "Embalses OGR", "ogr") if not layer.isValid(): print "Layer failed to load!" #CSV uri = "file:///C:/gvsig/tornado.csv?delimiter=%s&xField=%s&yField=%s" % (",", "X", "Y") vlayer = QgsVectorLayer(uri, "Tornados CSV", "delimitedtext") #Raster fileName = "C:\gvsig\donana.tif" fileInfo = QFileInfo(fileName) baseName = fileInfo.baseName() rlayer = QgsRasterLayer(fileName, baseName) if not rlayer.isValid(): print "Layer failed to load!" #Add layer QgsMapLayerRegistry.instance().addMapLayer(layer) QgsMapLayerRegistry.instance().addMapLayer(vlayer) QgsMapLayerRegistry.instance().addMapLayer(rlayer) print "End"
Y esto es todo por ahora, con esto conseguimos cargar 3 capas en nuestro proyecto.
Manual basado en la guía de «PyQGIS Cookbook», más información en su web.
Recordaros que ahora podéis seguir Másquesig también en la página de Facebook.