Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La consola PyQGIS, forma parte del software QGIS, es el entorno para ejecutar código pyqgis.
Descripción del entorno de la consola python en QGIS.
Botones de control
de la consola
Botones de control
de la consola
Área de despliegue Editor de scripts
de resultados PyQGIS
Botones de control
de la consola
Opciones. - Muestra ventana con las opciones para configurar el ambiente de la consola
Área de despliegue de
resultados
Área de comandos pyqgis donde se teclean los comandos pyqgis a ejecutarse por ejemplo podemos
decir que imprima el resultado de la suma de 2+6:
Activar – Mostrar
Botones de
editor
control de la
consola
Editor de scripts
PyQGIS
Abrir script. – Abre un script guardado para poder editarlo y ejecutarlo.
Abrir en editor externo. – abre el script actual en un editor fuera de la consola de pyqgis.
Pegar. – Pega el texto previamente copiado o pegado (el que este en el clipboard).
Inspector de objetos. -Muestra los objetos a manera de árbol para revisar dicho objeto.
2.- Introducción a PyQGIS
¿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.
https://qgis.org/pyqgis/3.4/
I.-Podemos automatizar tareas GIS. Listar el número de registros de las capas, realizar
geoprocesamiento, añadir y borrar elementos de una capa o tabla, crear geometrías nuevas, etc.
III.- Ejecutar aplicaciones personalizadas. Con PyQGIS podemos crear aplicaciones interactivas con
funcionalidades GIS. El módulo qgis.gui trae diversos componentes visuales GUI. El widget
mapcanvas puede ser fácilmente incorporado en la aplicación con soporte para zoom, pan y otras
herramientas.
• qgis.core
• qgis.gui
• qgis.analysis
• qgis.server
qgis.core
Este módulo trata con la funcionalidad de mapeo central y manejo de datos de QGIS. Esto incluye
crear y acceder a capas, generar diseños, agregar etiquetas, simbología, operaciones de tabla
(uniones, creación de campos, etc.).
Piense en este módulo como la representación programática del navegador de datos y la ventana
de capa.
qgis.gui
Este módulo se aplica tanto a los complementos como lo analizamos en este documento, así como
a las aplicaciones independientes que utilizan las bibliotecas QGIS. Vamos a entrar en esos más
tarde.
El módulo GUI incluye widgets gráficos que se pueden usar para crear cajas de herramientas, áreas
de lienzo de mapas y otros elementos gráficos para un complemento o aplicaciones independientes.
Por ejemplo, la clase qgis.gui.QgsMapCanvas () crea un widget de lienzo de mapa que se puede usar
para mostrar datos geoespaciales en un complemento o en una aplicación independiente sin tener
que crear uno nuevo.
qgis.analysis
El módulo de análisis incluye todas las herramientas necesarias para el análisis de datos y espacial.
Estas incluyen herramientas para verificar la topología, crear gráficos, editar etiquetas EXIF de
etiquetas geográficas etiquetadas, etc.
Estas herramientas se utilizan normalmente en trabajos geoespaciales de alto nivel en los que ya se
ha hecho la creación y edición de características y se debe generar inteligencia espacial. Las
interpolaciones ráster también se tratan en este módulo.
qgis.server
Como es de esperar por el nombre, el módulo del servidor está destinado a ser utilizado en un
servidor QGIS. Se utiliza para gestionar los servicios de publicación y las capas, así como para
gestionar el tráfico y las solicitudes de geoprocesamiento realizadas al servidor.
PyQt5
Qt es un conjunto de bibliotecas C ++ multiplataforma que implementan API de alto nivel para
acceder a muchos aspectos de los sistemas modernos de escritorio y móviles. Estos incluyen
servicios de ubicación y posicionamiento, conectividad multimedia, NFC y Bluetooth, un navegador
web basado en Chromium, así como el desarrollo tradicional de IU.
PyQt5 es un conjunto de herramientas para crear aplicaciones con interfaz gráfica. Es una mezcla
entre Python y la biblioteca Qt. La librería Qt es una de las bibliotecas GUI más potentes.
Es desarrollado por la compañía Riverbank Computing Limited.
Se implementa como más de 35 módulos de extensión y permite que Python se use como un
lenguaje de desarrollo de aplicaciones alternativo a C ++ en todas las plataformas compatibles,
incluidas iOS y Android.
Clases
Las clases de PyQt están divididas en varios módulos:
• QtCore
• QtGui
• QtNetwork
• QtSql
QtCore: Contiene las las funcionalidades principales que no tienen que ver con la interfaz gráfica.
Se usa para trabajar con tiempo, archivos y directorios, varios tipos de datos, flujos, urls.
QtGui: Contiene los componentes gráficos y sus clases relacionadas. Por ejemplo, botones,
ventanas, barras de estado, barras de herramienta, deslizadores, mapas de bit, colores y fuentes.
QtNetwork: Contiene las clases para programación en redes. Estas clases facilitan la programación
de clientes y servidores de tipo TCP/IP y UDPT haciendo que sea más fácil y más portable nuestro
código.
layer =QgsVectorLayer("D:/Curso_ProgramacionQgis/Insumos/Shapes/estados.shp","Estados","ogr")
#Crea objeto Layer
if not layer.isValid(): #si el layer es valido lo carga a Qgis
print ("Error al cargar la capa!")
else:
QgsProject.instance().addMapLayer(layer)#Carga el Objeto a Qgis
#Objeto QFileInfo que contenga la ruta desde donde el proyecto será cargado
fileName = "D:/Curso_ProgramacionQgis/Insumos/Raster/wsiearth.tif"
fileInfo = QFileInfo(fileName)
baseName = fileInfo.baseName() # Devuelve el nombre base del archivo sin la ruta
mylayer = QgsRasterLayer(fileName, baseName) #Crea un Objeto Raster
QgsProject.instance().addMapLayer(mylayer)
Obtener Información de Una Capa Activa en Qgis (Script_3.py)
layer=None
layer = qgis.utils.iface.activeLayer()
print ('Nombre de la capa : '+layer.name())
print ('Ubicacion : '+ layer.source())
layerList = QgsProject.instance().mapLayersByName('Estados')
print ('layer : '+layerList[0].name())
print ('Ubicacion : '+layerList[0].source())
• Herramientas de Geoprocesamiento
Buffer (Script_4.py)
Parámetros
Input [vector] cualquiera
Distance [número] Predeterminado: 10.0
Segments [número] Predeterminado: 5
Dissolve[booleano] Predeterminado: Falso
Output [vector]
processing.runAndLoadResults("qgis:difference",
{'INPUT': 'D:/Curso_ProgramacionQgis/resultados/jaliscobuffer.shp',
'OVERLAY': 'D:/Curso_ProgramacionQgis/Insumos/Shapes/jalisco.shp',
'OUTPUT':'D:/Curso_ProgramacionQgis/resultados/jalisco_diferencia.shp'})
Intersección (Script_6.py)
import processing #Importa la clase para procesar
processing.runAndLoadResults("qgis:intersection",
{'INPUT': 'D:/Curso_ProgramacionQgis/Insumos/Shapes/ZONA_DE_HELADAS.shp',
'OVERLAY': 'D:/Curso_ProgramacionQgis/Insumos/Shapes/aguascalientes.shp',
'OUTPUT' : 'D:/Curso_ProgramacionQgis/resultados/ags_intersecta.shp'})
Clip (Script_7.py)
processing.runAndLoadResults ("qgis:clip",
{'INPUT': 'D:/Curso_ProgramacionQgis/Insumos/Shapes/ISOYETA.shp',
'OVERLAY': 'D:/Curso_ProgramacionQgis/Insumos/Shapes/aguascalientes.shp',
'OUTPUT': 'D:/Curso_ProgramacionQgis/resultados/ags_isoyeta.shp'})
https://docs.qgis.org/testing/en/docs/user_manual/processing_algs/qgis/index.html
• Acceder a la estructura de la tabla de un shape (Script_8.py)
# -*- coding: utf-8 -*-
layer = QgsVectorLayer("D:/Curso_ProgramacionQgis/Insumos/Shapes/estados.shp","Estados","ogr")
print (" ---------------------------------")
print ("Listado de Campos")
print (" ")
for field in layer.fields(): #Obtener Informacion de la Estructura de la Tabla
print (field.name(), field.typeName())
print ("----------------------------------")
features = layer.getFeatures()
for feature in features:
# recuperar cada característica con su geometría y atributos
# muestra información sobre la geometría de la entidad
geom = feature.geometry()
tipogeom = geom.type()
if geom.type() == QgsWkbTypes.PointGeometry:
tipogeom = ("Punto")
elif geom.type() == QgsWkbTypes.LineGeometry:
tipogeom = ("Linea")
elif geom.type() == QgsWkbTypes.PolygonGeometry:
tipogeom = ("Poligono")
else:
print ("Unknown")
# obtener atributos
attrs = feature.attributes() # lista que contiene todos los valores de atributo de la capa
print(attrs)
print ("Tipo de poligono : ",tipogeom)
print ("Feature ID : ",feature.id())
print ("CVEGEO : " ,feature['CVEGEO'])
print ("CVE_ENT : ",feature[1])
print ("Estado : ",feature[2].encode('latin1').decode('utf-8'))
#Codificar a latin1 y decodificar a utf-8
print ("Shape Area : ",str (feature['SHAPE_AREA'] ))
• Acceso a geometría
Para acceder a la información de la geometría se utiliza el método geometry().Se puede utilizar el
método type() que devuelve un valor de enumeración QgsWkbTypes.
if(geom.type() == QgsWkbTypes.PolygonGeometry):
print “Es un Poligono”
>>>gPnt.wkbType() == QgsWkbTypes.PointGeometry
True
>>>gLine.wkbType() == QgsWkbTypes.LineGeometry
True
>>>gPolygon.wkbType() == QgsWkbTypes.PolygonGeometry
True
Para extraer información de una geometría existen funciones de acceso para cada tipo vectorial.
Cómo usar accesos.
>>>gPnt.asPoint()
(1, 1)
>>>gLine.asPolyline()
[(1, 1), (2, 2)]
>>>gPolygon.asPolygon()
[[(1, 1), (2, 2), (2, 1), (1, 1)]]
También hay una función auxiliar isSingleType()para averiguar si una geometría es simple o
multiparte.
Para geometrias multiples existen funciones similares para accesar :
if geom.type() == QgsWkbTypes.PointGeometry:
# El tipo de geometría puede ser simple o múltiple.
if geomSingleType:
x = geom.asPoint()
print("Point: ", x)
tipoGeom = "Punto"
else:
x = geom.asMultiPoint()
print("MultiPoint: ", x)
tipoGeom = "Milti-Punto"
elif geom.type() == QgsWkbTypes.LineGeometry:
if geomSingleType:
x = geom.asPolyline()
print("Line: ", x, "length: ", geom.length())
tipoGeom = "Linea"
else:
x = geom.asMultiPolyline()
print("MultiLine: ", x, "length: ", geom.length())
tipoGeom = "Multi-Linea"
elif geom.type() == QgsWkbTypes.PolygonGeometry:
if geomSingleType:
x = geom.asPolygon()
print("Polygon: ", x, "Area: ", geom.area())
tipoGeom = "Poligono"
else:
x = geom.asMultiPolygon()
print("MultiPolygon: ", x, "Area: ", geom.area())
tipoGeom = "Multi-Poligono"
else:
print("Geometria desconocida o invalida")
break
También se puede calcular propiedades geométricas de geometrías, tales como el área (en el caso
de polígonos) o longitudes (por polígonos y líneas)
• Predicados:Intersects, Touches, Disjoint, Crosses, Within, Contains, Overlaps, Equals,
Covers
• Operaciones:Union, Distance, Intersection, SymmetricDifference, Convex Hull, Envelope,
Buffer, Simplify, PolygonAssembly, Valid, Area, Lengt
uri = QgsDataSourceUri()
def conexionBD():
uri.setConnection("host","puerto","bd","usuario,"pass")
db = QSqlDatabase.addDatabase("QPSQL")
if db.isValid():
db.setHostName("host")
db.setDatabaseName(uri.database())
db.setPort(int(uri.port()))
db.setUserName(uri.username())
db.setPassword(uri.password())
db.open()
return db
return None
def getClavecarta():
listado = []
db =conexionBD()
if db.open():
print ("---------- Base de Datos Abierta--------------")
uri.setDataSource("esquema","tabla","geom","filtro=''")
vlayer = QgsVectorLayer(uri.uri(), "NombreCapa", "postgres")
QgsProject.instance().addMapLayer(vlayer)
query = db.exec_("select * from esq.tabla where * = '*****' order by
* asc limit 10")
while query.next():
record = query.record()
print ("ID "+str (record.value(0)) + " NOMBRE " +
record.value(1))
llistado = listado + [record.value(1)]
db.close()
print ("----------Base de Datos Cerrada------------")
return listado
lista =getClavecarta()
4.- Construyendo un plugin de QGIS con Python
Los complementos son una excelente manera de ampliar la funcionalidad de QGIS. Puede escribir
complementos usando Python que pueden ir desde agregar un botón simple hasta kits de
herramientas sofisticados. Este tutorial describirá el proceso involucrado en la configuración de su
entorno de desarrollo, el diseño de la interfaz de usuario para un complemento y la escritura de
código para interactuar con QGIS. Por favor, revise el tutorial de Programación para comenzar con
Python para familiarizarse con los conceptos básicos.
Qt Designer
Qt Designer es la herramienta de Qt para diseñar y construir interfaces gráficas de usuario (GUI) con
Qt Widgets. Puede componer y personalizar sus ventanas o cuadros de diálogo de una manera que
usted ve lo que obtiene (WYSIWYG) y los prueba utilizando diferentes estilos y resoluciones.
Cualquier tipo de desarrollo de software requiere un buen editor de texto. Si ya tiene un editor de
texto favorito o un IDE (entorno de desarrollo integrado), puede usarlo para este tutorial. De lo
contrario, cada plataforma ofrece una amplia variedad de opciones gratuitas o de pago para los
editores de texto. Elige el que más se ajuste a tus necesidades.
Plugin Builder
Hay un útil complemento de QGIS llamado que crea todos los archivos necesarios y el código de
referencia para un complemento. Encuentra e instala el plugin. Consulte Uso de complementos para
obtener más detalles sobre cómo instalar complementos. PluginBuilderPlugin Builder.
Plugin Reloader
Este es otro complemento auxiliar que permite el desarrollo iterativo de complementos. Con este
complemento, puede cambiar su código de complemento y hacer que se refleje en QGIS sin tener
que reiniciar QGIS cada vez. Encuentra e instala el plugin. Consulte Uso de complementos para
obtener más detalles sobre cómo instalar complementos.Plugin Reloader.
Nota
Plugin Reloader es un plugin experimental. Asegúrese de haber marcado Mostrar también
complementos experimentales en la configuración del Administrador de complementos si
no puede encontrarlo.
Procedimiento
2. Verá el cuadro de diálogo Plugin Builder QGIS con un formulario. Puede completar el
formulario con detalles relacionados con nuestro complemento. El nombre de la clase será
el nombre de la clase Python que contiene la lógica del complemento. Este también será el
nombre de la carpeta que contiene todos los archivos de complemento. El nombre del
complemento es el nombre bajo el cual aparecerá su complemento en el Administrador de
complementos. Agregue una descripción en el campo Descripción. El nombre del módulo
será el nombre del archivo principal de Python para el complemento. Deje los números de
versión como están e ingrese su nombre y dirección de correo electrónico en los campos
correspondientes. Haga clic en Siguiente:
3. A continuación, se le pedirá que elija un directorio para su complemento. Debe buscar el
directorio del complemento de Python de QGIS en su computadora. La ubicación de la
carpeta dependerá de su plataforma de la siguiente manera: (Reemplace usuario con su
nombre de inicio de sesión).
4. Verá un cuadro de diálogo de confirmación una vez que se haya creado su plantilla de
complemento. Tenga en cuenta la ruta a la carpeta del complemento.
5. Antes de que podamos usar el complemento recién creado, debemos compilar el
resources.qrc archivo creado por Plugin Builder. Inicie el Shell OSGeo4W en
Windows o en un terminal Mac o Linux
Plugin Buildercd.
8. Ahora estamos listos para echar un primer vistazo al nuevo complemento que creamos.
Cierre QGIS y ejecútelo nuevamente. Vaya a Complementos ‣ Administrar e instalar
complementos y habilite el complemento en la pestaña Instalado. Notará que hay un nuevo
icono en la barra de herramientas y una nueva entrada de menú.
DESARROLLO DE PLUGIN VALIDA GEOMETRIA