This tutorial aims to help GIS users to get started with Python programming for QGIS 3. In contrast to many tutorials out there, the idea is to not assume any previous programming knowledge.
Unlike many introductions to Python, this one does not start with an installation and setup guide. Why? Because if you have installed QGIS, you already have a working installation of Python on your system. All you need to get started is to launch QGIS and open the Python console (Plugins Python console).
And then maybe write one explaining commonly used structures/logic of scripts, such as looping through features in a layer, creating new calculated columns. This enables learners to apply pyqgis to numerous problems.
Thanks for great and friendly explanation. I have been studying GIS for quite sometime. i would like to see GIS project from scratch that shows how to create shapefiles from other Shapefiles and how to to collect GPS data and digitize it. Also vector and raster combined.
Thanks for your great turtorial ,following your steps,I have done a IDW process with a cvslayer programmaticly ,but it is gray. I can colorize the IDW result layer by specifying classified value ranges and corrsponding color in the symbology tab of Qgis layer properties form.Hower I am pretty new with both GIS and Python , I do not know how to colorize the result raster layer by python program. Can you do me a favor ,thanks.(set point color by its value,for example: 0
Hi underdark, Thank you very much for the wonderful tutorial! I am from Japan and first I looked for some tutorials like this in Japanese but I could not find any. So lucky to get to know this tutorial. I love it!
Looks and sound good, i cant wait to start the course to learn about pyQGIS. My question is are operations preformed on python console of qgis, are the codes and syntaxes the same as ArcMap python console?!
The release of QGIS 3 has brought many updates, one significant change is its Python bindings or as it's more commonly known as PyQGIS. I have noticed the recent introduction of the pyqgis-3 tag, here is a quick comparison with the number of posts with the original pyqgis tag as of today:
I'd agree that pyqgis-3 should be a synonym of pyqgis, and you should suggest it (I don't have enough pyqgis rep to do so myself). but we'll need a mod to create it since SE thinks it's a version specific tag.
This tutorial is now obsolete. The preferred way to do table joins via pyqgis is to run the native:joinattributestable algorithm via Python. See details at Running Processing Algorithms via Python (QGIS3).
This tutorial shows how to use Python scripting in QGIS (PyQGIS) to perform atable join and apply a graduated style to the resulting layer. This tutorialreplicates the steps of the Performing Table Joins tutorial using onlypython scripting.
Load the shapefile. The Census Tracts file is a zip file containing theshapefile. While we can unzip it and load the shapefile, The OGR providerhas the ability to load the zip file directly via a Virtual Filesystem.Adding /vsizip/ in the path, we can access the shapefile contained inthe zip archive.
Create the table join. Table joins in QGIS are performed usingQgsVectorJoinInfo object. We need to specify the GEO.id2 field fromthe CSV layer as the Join Field and the GEOID field from theshapefile layer as the Target Field. Once you run the followingcode, the shapefile layer will have additional attributes joined from thecsv layer.
We are using the processing.runandload() method to execute the algorithminstead of the more common processing.runalg(). Since we want to loadthe resulting joined layer in QGIS, processing.runandload() is a betterchoice.
We will stick with the original join using QgsVectorJoinInfo for theremainder of the tutorial. Now it is time to apply a graduated style to thejoined layer. The population field name in the joined layer isca_tracts_pop_D001. We will apply a graduated renderer using theQgsGraduatedSymbolRendererV2 class in the Quantile mode. Refer toPerforming Table Joins for the colors and ranges that we need to use.
Typing the code in the Python Console is useful for small tasks, but itis far easier to use the built-in Editor. You can copy theentire script in the Editor and click Run. As thescript finishes, you would have created a table join and styled theresulting layer without any manual steps.
ltimamente he estado trabajando mucho con QGIS, el software SIG de cdigo libre indispensable para cualquier analista de datos geogrficos. El trabajo que realizaba era muy manual (crear y editar polgonos), pero haba ciertos pasos que senta que poda automatizar, as que decid aprender al menos un poco de PyQGIS para hacer las tareas repetitivas.
PyQGIS es la librera de Python para ejecutar tareas dentro de QGIS. Si has usado QGIS seguro que en ms de una vez has visto el logo de Python en la barra de herramientas. Python y QGIS tienen una gran integracin y aprender a usar PyQGIS es una inversin de tiempo con rendimientos garantizados. Pese a ello, me parece que no es muy fcil iniciar con PyQGIS, incluso si uno ya sabe Python. PyQGIS y su documentacin parece que estn diseados ms hacia desarrolladores de plugins que hacia usuarios finales. Si uno viene de utilizar herramientas de anlisis geogrfico ms sencillas como GeoPandas o SF seguramente PyQGIS parece muy burocrtico o complicado en un principio, pero como en todo, se trata de entender su lgica y poco a poco uno va descubriendo que tambin es una herramienta muy completa y muy prctica.
En esta entrada me gustara mostrar la lgica bsica para que alguien que ya tiene conocimentos de la sintaxis de Python y ha trabajado con QGIS pueda empezar a automatizar procesos sencillos con PyQGIS. En particular voy a mostrar un par de ejemplos prcticos aplicando algoritnmos de validacin y procesamiento. Aclaro que no soy un experto en QGIS, pero quiero compartir mi aprendizaje al iniciar porque s que puede haber otras personas en la misma situacin.
Voy a trabajar desde la interfaz grfica de QGIS, por lo que obviamente hay que tener instalado QGIS en la computadora. En otra entrada mostrar cmo instalar QGIS desde Anaconda para trabajar usando JupyterLab.
Una vez instalado y descargado QGIS, abrimos el programa e iniciamos un nuevo proyecto. En la barra de herramientas encontraremos el smbolo de Python. Al hacer clic se abrir una consola de Python dentro de la ventana de QGIS. Si no ves el cono, puedes acceder usando el men en la pestaa complementos >> Consola de Python
Escrbir cdigo en la terminal no es muy prctico, por eso es mejor usar el editor de scripts, al que se puede acceder al hacer clic en el cono superior de una hoja con un lpiz. Tambin (me parece) es mejor trabajar en una ventana separada, para ello hacemos clic en el cono de la parte superior derecha con dos cuadritos (al lado de la X).
En la nueva configuracin, el editor de scripts aparece a la derecha y la ventana de resultados, junto con la terminal, del lado izquierdo. Podemos escribir cdigo en el editor y ejecutarlo haciendo clic en el cono superior en forma de tringulo verde (o con el atajo de teclado ctrl + shift + e), el resultado se imprime en la ventana de resultados.
Dentro de la consola de Python tenemos acceso a las libreras con las funciones importantes para poder manipular elementos de QGIS. Vamos a crear un nuevo script que se llame intro_pyqgis_01.py. En el importamos las funciones (constructores, para ser ms precisos) QgsProject, QgsVectorLayer del mdulo qgis.core.
Como sabemos, en QGIS se usan proyectos que contienen capas (layers). Las capas normalmente hacen referencia a archivos con datos geoespaciales, tpicamente Shapefiles o GeoJSON, aunque tambin puede haber capas de otros tipos. Bueno, esa misma estructura la debemos tener en cuenta en PyQGIS. Debemos trabajar sobre un objeto tipo proyecto que contiene objetos de tipo capas.
Y as de fcil es cargar datos! Sin embargo, debemos de tener cuidado porque si corremos el mismo script varias veces se cargar la misma capa muchas veces, ya que QGIS permite cargar mltiples veces el mismo archivo.
Para evitar eso, vamos a modificar el script e incluir una pequea condicin que primero verifica si ya existe en el proyecto una capa con el mismo nombre. En caso de que no esxista, entonces carga la capa, si ya existe, entonces no hace nada ms. De esta forma podemos ejecutar el archivo intro_pyqgis_01.py tantas veces queramos sin cargar la misma capa.
Como todo objeto en Python, los proyectos y capas tienen mtodos y atributos. De hecho, tienen muchos mtodos y atributos, por lo que es dificil saber qu es lo que uno necesita. Ya vimos por ejemplo, un mtodo para obtener el nombre del archivo del proyecto que estamos usando, y tambin cmo aadir una capa a un proyecto. Si queremos saber todos los mtodos disponibles para un objeto projecto podemos consultar la documentacin.
Igualmente, de las capas podemos encontrar cosas muy interesantes, como el nmero de filas y columnas que tienen los datos asociados, o el sistema de coordenadas. Consulta aqu la documentacin de los objetos QgsVectorLayer
Tambin podemos obtener los datos de una fila en particular de la capa con el mtodo .getFeature(). El resultado es un objeto tipo QgsFeature. En este caso por ejemplo obtenemos la fila en la posicin 11 del archivo y vemos los datos que contiene.
Y as, podemos seguir obteniendo ms objetos. Por ejemplo del feature anterior podemos obtener la geometra, que es un objeto tipo QgsGeometry: Multipolygon. De la geometra, podemos obtener el centroide, que es un QgsGeometry: Point
Es muy interesante porque conociendo bien esta lgica podemos integrar muy bien QGIS con las dems herramientas de Python. Por ejemplo, solo por diversin, vamos a hacer una grfica de la colonia que seleccionamos usando matplotlib, que ya viene instalado dentro del entorno de QGIS.
Por ejemplo, yo estaba creando polgonos manualmente y cada tanto tena que revisar que no tuvieran errores. Inicialmente haca esto siguiendo la ruta del men Vectorial >> Herramientas de Geometra >> Comprobar Validez y seleccionaba las opciones para que el algoritmo se ejecutara. Todo esto era repetitivo y adems era medio molesto, porque como resultado de la ejecucin siempre aada 3 capas al proyecto, que me tocaba retirar manualmente. Entonces fue cuando descubr que poda programar la operacin de validacin y as solo tena que ejecutar el script cuando lo necesitara. Luego segu automatizando otras operaciones que eran repetitivas.
c80f0f1006