En esta entrada para novatos te enseñamos a trabajar con PyQGIS desde cero.
Índice
¿Qué es PyQGIS?
PyQGIS es la librería de QGIS para ejecutar código Python. A partir de la versión 0.9 en septiembre de 2007, QGIS tiene soporte para ejecutar scripts utilizando el lenguaje Python.
QGIS elige Python por ser uno de los lenguajes favoritos para scripting. Python es un lenguaje de programación para GIS orientado a objetos con el que es fácil aprender PyQGIS.
¿Qué podemos hacer con PyQGIS?
- Podemos automatizar tareas GIS. Listar el numero de registros de las capas, realizar geoprocesamiento, añadir y borrar elementos de una capa o tabla, crear geometrías nuevas o exportar un mapa a PDF.
- Crear complementos de QGIS (plugins) utilizando Python como lenguaje de programación. La principal ventaja de utilizar Python es la simplicidad en la distribución y un desarrollo sencillo.
- Ejecutar aplicaciones personalizadas. Con PyQGIS podemos crear aplicaciones interactivas con funcionalidades GIS. El módulo qgis.gui trae diversos componentes visuales GUI. El widget map canvas puede ser fácilmente incorporado en la aplicación con soporte para zoom, pan y otras herramientas.
¿Qué ventajas me aporta PyQGIS?
- Podrás generar tus propios scripts para almacenar en ellos los procesos GIS que antes hacías a mano: ahorras tiempo y ganaras precisión.
- Generarás con facilidad inventarios, informes y consultas sobre los contenidos GIS que manejas: tendrás registradas y actualizadas tus capas, tablas, datos, etc.
- Pasarás de realizar pequeñas operaciones GIS a gestionar grandes volúmenes de información.
¿Cómo ejecutar el código?
Tenemos dos opciones para ejecutar código Python en QGIS:
- Desde el propio QGIS podemos utilizar la consola de Python que está integrada. Para ello debemos ir a complementos > Consola de python > mostrar el editor, escribir el código y ejecutar el script.
- Utilizar un IDE (un interprete de) como puede ser PyCharm, PyDev o Eclipse. En este caso en primer lugar debemos importar el módulo qgis, estableciendo la ruta en la que se encuentra QGIS e iniciar la aplicación.
Añadiendo una capa vectorial mediante PyQGIS
El ejemplo más sencillo es el de añadir una capa vectorial a QGIS desde la consola de Python. Desde la propia ventana basta con escribir:
layer = QgsVectorLayer(r"C:/Temp/cities.shp","cities") list (layer.getFeatures())
Con la primera sentencia estamos instanciando la clase QgsVectorLayer, que requiere los siguientes argumentos: path, basename y providerLib.
De este modo hemos pasado a la variable layer los datos de la capa que queremos utilizar: su nombre completo y ruta, el nombre con el que aparecerá en la TOC, y el proveedor, que para capas de tipo .shp es ogr (por defecto).
Una vez que el programa sabe cuál es la capa, la añadimos a QGIS para visualizarla:
QgsProject.instance().addMapLayer(layer)
Con el método addMapLayer() de la clase QgsProject añadimos nuestra capa en el proyecto.
De una manera muy sencilla hemos añadido un SHP a QGIS. También podemos añadir archivos GeoPackage, CSV, GPX, conectar a WFS, bases de datos SpatiaLite, MySQL y PostGIS o rasters.
Añadir un GeoPackage en QGIS mediante PyQGIS
Paa añadir un GeoPackage a QGIS, el proceso es similar al anterior, utilizamos la clase QgsVectorLayer, pero en este caso es necesario añadir la sentencia |layername para especificar el nombre de la capa dentro del GeoPackage. Aquí mostramos un ejemplo:
gpkg_layer = QgsVectorLayer(r"C:/Temp/cities.gpkg|layername=cities", "cities", "ogr") QgsProject.instance().addMapLayer(gpkg_layer)
Añadir todas las capas de un GeoPackage:
fileName = "sample.gpkg" layer = QgsVectorLayer(fileName,"test","ogr") subLayers =layer.dataProvider().subLayers() for subLayer in subLayers: name = subLayer.split('!!::!!')[1] uri = "%s|layername=%s" % (fileName, name,) #Create layer sub_vlayer = QgsVectorLayer(uri, name, 'ogr') #Add layer to map QgsProject.instance().addMapLayer(sub_vlayer)
Añadir una capa PostGIS en QGIS a través de PyQGIS
Veamos cómo añadir un objeto geográfico o feature (concretamente el polígono correspondiente a España) de una capa que se encuentra en PostGIS:
# - *- coding: utf-8 - *- from qgis.core import * #Añadiendo capas PostGIS uri = QgsDataSourceUri() # introducimos nombre del servidor, puerto, nombre de la base de datos, usuario y contraseña uri.setConnection("localhost", "5432", "world", "postgres", "postgres") # introducimos el nombre del esquema, nombre de la tabla, columna de geometría y opcionalmente un filtro con una clausula WHERE uri.setDataSource("public", "countries", "geom", "name = 'Spain'") layer = QgsVectorLayer(uri.uri(), "countries", "postgres") QgsProject.instance().addMapLayer(layer)
Este es el resultado:
Recursos:
Licenciado en Geografía. Máster en Sistemas de Información Geográfica. Consultor GIS desde el año 2004. En MappingGIS desde el año 2012 para ayudarte a impulsar tu perfil GIS y diferenciarte de la competencia. Echa un vistazo a todos nuestros cursos de SIG online.
El recurso imprescindible es el libro de Gary Sherman «The PyQGIS Programmer’s Guide Extending QGIS 2.x with Python». El PyQGIS Developer Cookbook es muy complejo por lo general y resumido que resulta al abarcar tantos tópicos. El primero es el que te señala todos los inconvenientes y la manera de resolverlos para las diferentes plataformas donde se puede programar con PyQGIS.
Gracias por el comentario José, completamente de acuerdo. Ahora solo a esperar que este disponible para comprar en Amazon.es!
Saludos