Francisco Raga López
2016
Desarrollo de Plugins usando PyQgis para Qgis
¿¿Quién es este tipo??
Francisco Raga López
Ingeniero en Cartografía y Geodesia
Analista / Desarrollador de Software Gis
Índice
- Herramientas necesarias
- Procedimiento
- Resultado
Herramientas Necesarias
-
Qt Designer: QGIS se escribe utilizando el marco de Qt. Para el desarrollo de plugins, usaremos una aplicación llamada Qt Designer para diseñar la interfaz para nuestro plugin.Se encuentra dentro del paquete de OSGeo4W.
-
Python Bindings para Qt : Para crear plugins necesitamos la herramienta de comandos pyrcc4.Para eso necesitamos descargar el paquete de OSGeo4W.
Herramientas Necesarias
- Un editor de texto o un Python IDE: Aquí podemos elegir programas como Notepad ++, aunque yo recomiendo emplear eclipse con el plugin PyDev.
- Plugin Builder: Con este plugin podemos crear toda la estructura necesaria de nuestro desarrollo.
- Plugin Reloader:Necesaria para recargar nuestro plugin sin necesidad de cerrar y abrir Qgis.
Link PyDev
http://www.eclipse.org/
https://plugins.qgis.org/plugins/pluginbuilder/
https://plugins.qgis.org/plugins/plugin_reloader/
Al lio!!
- Creamos la estructura
- Compilamos
- Creamos el Interfaz
- Código
- Resultado
Resumen pasos necesarios:
1. Creamos la estructura
1
2
1. Creamos la estructura
3
Windows
Mac
Linux
c:\Users\username\.qgis2\python\plugins
/Users/username/.qgis2/python/plugins
/home/username/.qgis2/python/plugins
Rutas
1. Creamos la estructura
4
C:\Users\<username>\.qgis2\python\plugins\GetLayers
2. Compilamos
Necesitamos compilar el fichero de recursos resources.qrc
- Abrimos la consola de OSGeo4W
- Buscamos el directorio del plugin :
- Escribimos:
make
C:\Users\<username>\.qgis2\python\plugins\GetLayers
3. Creamos el Interfaz
1
Seleccionamos el plugin en la configuración de Plugin Reloader
2
3. Creamos el Interfaz
Abrimos Qt Designer y dejamos Qgis abierto
- Label
- boton
- Combobox
4. Código
Descarga Cartografìa
Abrimos el fichero get_layers.py y modificamos el método run()
def run(self):
"""Run method that performs all the real work"""
#Populate Combobox
layers = self.iface.legendInterface().layers()
layer_list = []
layer_list = [layer.name() for layer in layers]
self.dlg.comboBox.clear()
self.dlg.comboBox.addItems(layer_list)
# show the dialog
self.dlg.show()
def layer_field():
# Identify selected layer by its index
selectedLayerIndex = self.dlg.comboBox.currentIndex()
selectedLayer = layers[selectedLayerIndex]
self.iface.mapCanvas().setExtent(selectedLayer.extent())
self.iface.mapCanvas().refresh()
#Signal
self.dlg.pushButton.clicked.connect(layer_field)
5.Resultado
Preguntas?
Gracias por su atención
"Emplear software libre es más divertido si participamos en él !! "
PyQgis
By Fran Raga
PyQgis
- 815