Você está na página 1de 11

Roteiro

Desenvolvimento de Plugin para o QGIS 3.X

Prof. Afonso de Paula dos Santos

Universidade Federal de Viçosa


Departamento de Eng. Civil
Área Acadêmica de
Eng. de Agrimensura e Cartográfica

Viçosa-MG, 2021

Sumário

A. Instalar os softwares necessários ........................................................................................... 2


A-1. QGIS – OSGeo4W network .................................................................................................................. 2
A-2. Notepad++ ......................................................................................................................................... 2
A-3. Link Shell extensions .......................................................................................................................... 2
A-4. Plugins no QGIS .................................................................................................................................. 2
B. Configurar as pastas de trabalho ............................................................................................ 3
C. Criar a estrutura do plugin com o “Plugin Builder” ................................................................... 4
D. Habilitar o plugin para reconhecimento no QGIS ..................................................................... 6
E. Configurar a parte gráfica do plugin no QT Designer ................................................................. 7
F. Editar o código python no Notepad++ ...................................................................................... 8
F-1. exemplo_buffer.py .............................................................................................................................. 8
G. Formas de disponibilizar o plugin criado ............................................................................... 11

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 1 / 11


Prof. Afonso de Paula dos Santos
Neste material você terá um roteiro básico do processo de desenvolvimento de um plugin para o
ambiente do QGIS. As etapas do processo, expostas nos tópicos seguintes, apresentam os principais
passos e códigos utilizados. Para complementar este material, é disponibilizado uma série de vídeos
na plataforma do YouTube para mostrar detalhadamente cada etapa.

Etapa A. Instalar os softwares necessários

[1/5]: https://youtu.be/k5sqL5NfdE0

A-1. QGIS – OSGeo4W network

Baixar “OSGeo4W network installer” e executar o instalador

• https://www.qgis.org/pt_BR/site/forusers/download.html
• Usar instalação expressa;
• Selecionar QGIS, GDAL, GRASS;
• Aceitar todos os termos de licenças;
• Exercitar a paciência: demora a instalação!

A-2. Notepad++

Baixar a versão mais recente e instalar normalmente.

• https://notepad-plus-plus.org/downloads/

A-3. Link Shell extensions

Executar o instalador e seguir os passos padrão de instalação.

• https://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html

A-4. Plugins no QGIS

No QGIS instalar os plugins “Plugin Builder 3” e “Plugin Reload”

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 2 / 11


Prof. Afonso de Paula dos Santos
Etapa B. Configurar as pastas de trabalho

[1/5]: https://youtu.be/k5sqL5NfdE0

Crie uma pasta no diretório “C:” com o nome “PyQGIS”. Esta pasta será onde se desenvolverá o plugin.

Crie um atalho do diretório padrão de plugins do QGIS:

• No QGIS acesse o menu Configurações > Perfis de Usuário > Abrir pasta de perfil ativo.

• Na nova janela que será aberta, entre no diretório “python”. Após clique com botão direito em
cima da pasta plugin e escolha a opção “copiar como caminho”.

• Dentro da pasta PyQGIS, clique com o botão direito e acesse “Novo > Atalho”. Cole o caminho
copiado no passo anterior. Salve o atalho como “default”.

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 3 / 11


Prof. Afonso de Paula dos Santos
Etapa C. Criar a estrutura do plugin com o “Plugin Builder”

[2/5]: https://youtu.be/3OYCv6fIkpE

No QGIS, execute o plugin “Plugin Builder”:

1ª tela:

• Preencha o nome da classe como “ExemploBuffer”

• Nome do plugin como “Exemplo Buffer”

• Descrição como “Exemplo de plugin que aplica um buffer em uma camada vetorial”

• Nome do módulo como “exemplo_buffer”

• Autor: preencha com seu nome ou instituição

• Email: preencha com seu email.

2ª tela:

• Insira a descrição detalhada sobre o plugin

3ª tela:

• No campo Template há três opções de plugins: Janela de Diálogo, Janela Dock; Caixa de
ferramentas. Escolha a janela de diálogo.

• Text for menu item: digite o nome do plugin que irá aparecer no QGIS, no caso “Exemplo Buffer”.

• No campo “Menu” escolha “plugin” para a ferramenta aparecer no menu plugin do QGIS.

4ª tela:

• deixe todas as opções marcadas para adicionar componentes à estrutura do plugin. Os


detalhes destes componentes podem ser vistos no help do Plugin Builder.

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 4 / 11


Prof. Afonso de Paula dos Santos
5ª tela:

• É recomendável que seu plugin esteja armazenado no github e que os links sejam preenchidos
nos campos “Bug Tracker”, “Repository” e “Home Page”. Para este exemplo não será
necessário configurar esta etapa.

• No campo “Tags” pode-se adicionar palavras-chaves.

• Deixe desmarcado a opção de plugin experimental.

6ª tela:

• Defina a pasta “C:/PyQGIS” para gerado a estrutura do plugin

• Finalize clicando no botão Generate.

Será apresentado uma tela com algumas informações. Clique em “OK”.

Confira no diretório do plugin “C:/PyQGIS/exemplo_buffer” todos os arquivos criados. Repare que,


entre os arquivos presentes no diretório raiz, existe o arquivo “resources.py” que foi compilado a partir
do “resources.qrc”.

Caso o arquivo “resources.py” não exista, execute o programa “OSGEO4W SHELL”. Entre no diretório
do plugin com o comando cd C:/PyQGIS/exemplo_buffer. Após, execute o comando pyrcc5 resources.qrc
-o resources.py .

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 5 / 11


Prof. Afonso de Paula dos Santos
Etapa D. Habilitar o plugin para reconhecimento no QGIS

[3/5]: https://youtu.be/5cDHJp1EQkA

Na pasta “PyQGIS” terá o diretório “exemplo_buffer”, relativa à estrutura do plugin criada na etapa
anterior.

Clique com o botão direito do mouse sobre a pasta “exemplo_buffer” e escolha a opção “Selecionar a
origem do vínculo”

Use o atalho “default” para entrar dentro do diretório em que os plugins do QGIS ficam armazenado.

Dentro desse diretório, clique com botão direito e escolha a opção “Soltar como...” > “Vínculo
Simbólico”. Esse procedimento, executados com as ferramentas do “Link Shell Extension”, evita que o
usuário fique a todo momento copiando os dados para a pasta do QGIS. Ele cria um atalho que o QGIS
entende.

Reinicie o QGIS. Após, vá no menu “Complementos” > “Gerenciar e Instalar complementos...”. Na


janela que será aberta, clique na opção “Instalados” no painel da esquerda e, em seguida, ative o plugin
“Exemplo Buffer” no painel principal.

No menu plugin irá aparecer a opção “Exemplo Buffer”. Ao executar o plugin, aparecerá apenas uma
janela com os botões “OK” e “Cancel”.

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 6 / 11


Prof. Afonso de Paula dos Santos
Etapa E. Configurar a parte gráfica do plugin no QT Designer

[4/5]: https://youtu.be/ExKnjPEhpsE

Execute o programa “Qt Designer for QGIS”.

Na janela inicial, clique no botão “open” e vá até o diretório do plugin. Selecione o arquivo de extensão
.ui (“exemplo_buffer_dialog_base.ui”).

Na janela gráfica adicione os seguintes componentes:

• 3 label
• 1 comboBox
• 1 lineEdit
• 1 doubleSpinBox
• 2 toolButton

Os labels devem ter a propriedade de texto alterada para instruir o usuário no uso do plugin.

Ao final, salve o arquivo e feche o Qt Designer.

Para atualizar a parte gráfica do plugin no QGIS é necessário utilizar o “Plugin Reload”.

• Execute a opção “Configure” e na janela que será aberta, selecione o plugin “Exemplo Buffer” e
clique em “OK”.
• Após, para recarregar, utilize a opção do “Plugin Reload” chamada “reload plugin: Exemplo
Buffer
• Após, abra o plugin em desenvolvimento e veja a janela gráfica atualizada.

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 7 / 11


Prof. Afonso de Paula dos Santos
Etapa F. Editar o código python no Notepad++

[5/5]: https://youtu.be/HcpP7FVAn48

F-1. exemplo_buffer.py

Abra o Notepad++ e edite o arquivo “exemplo_buffer.py”.

Insira as seguintes bibliotecas


from qgis.PyQt.QtWidgets import QAction, QFileDialog
from qgis.core import *
.
.
.
import processing
import sys, os
from osgeo import ogr

Antes da função “run”, vamos inserir algumas funções necessárias para:

• Carregar a lista de camadas vetoriais do projeto do QGIS no combobox;


• Abrir uma camada vetorial externa e inseri-la no projeto do QGIS. Consequentemente, atualizar
o combobox;
• Obt er a camada ativa no combobox, que será utilizada para aplicar o buffer;
• Definir a camada de resultado (saída).
• Definir as variáveis que serão utilizadas na função /run().

A função “carregaVetor()” tem o objetivo de carregar as camadas vetoriais do projeto corrente do QGIS
ao combobox
def carregaVetor(self):
"""Preenche o combox com as layers vetoriais existentes no projeto"""
self.dlg.comboBox.clear()
lista_layers = [layer for layer in QgsProject.instance().mapLayers().values()]
lista_layer_vetor = []
for layer in lista_layers:
if layer.type() == QgsMapLayer.VectorLayer:
lista_layer_vetor.append(layer.name())
self.dlg.comboBox.addItems(lista_layer_vetor)

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 8 / 11


Prof. Afonso de Paula dos Santos
A função “abrirVetor()” tem o objetivo abrir uma caixa de diálogo onde o usuário possa procurar uma
camada e adicionar ao projeto corrente do QGIS. Logo após, o combobox é atualizado e definido com
a camada aberta.
def abrirVetor(self):
"""abre a janela de dialógo para abrir uma layer a ser aplicada o buffer"""
camada_abrir = str(QFileDialog.getOpenFileName(caption="Escolha a camada...",
filter="Shapefiles (*.shp)")[0])
#se camada_abrir não for vazio
if (camada_abrir != ""):
self.iface.addVectorLayer(camada_abrir, str.split(os.path.basename(camada_abrir),".") [0],
"ogr")
self.carregaVetor()

A função “camadaEnt()” tem o objetivo de obter a camada vetorial que foi escolhida pelo usuário e
inseri-la no combobox.
def camadaEnt(self):
"""Obter a layer definida no combobox"""
layer = None
nomecamada = self.dlg.comboBox.currentText()
for lyr in QgsProject.instance().mapLayers().values():
if lyr.name() == nomecamada:
layer = lyr
break
return layer

A função “definirSaida()” tem o objetivo abrir a janela de diálogo para o usuário definir o nome da
camada resultante da aplicação do buffer.
def definirSaida(self):
"""abre a janela de dialógo para definir o nome e o local da layer a ser gerada"""
camada_salvar = str(QFileDialog.getSaveFileName(caption="Defina a layer de saída...",
filter="Shapefiles (*.shp)")[0])
self.dlg.lineEdit.setText(camada_salvar)

A função “variaveis()” define todas as variáveis de camadas e largura do buffer a ser utilizado na função
“run()”.
def variaveis(self):
"""define as variaveis utilizada na função run"""
self.camada = self.camadaEnt()
self.saida = self.dlg.lineEdit.text()
self.largura = self.dlg.doubleSpinBox.value()

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 9 / 11


Prof. Afonso de Paula dos Santos
Por fim, tem-se a função “run”. Nesta função desenvolverá o código que executará o buffer na camada
escolhida.

Há várias formas de aplicar um buffer utilizando o python. Pode-se utilizar a API do QGIS, a partir da
classe QgsGeometry; pode-se utilizar os comandos do SAGA ou o processamento do próprio QGIS.

Neste exemplo, utilizará o comando buffer nativo do próprio QGIS. Para isto é necessário declarar a
biblioteca processing.
def run(self):
"""Run method that performs all the real work"""

# Create the dialog with elements (after translation) and keep reference
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
if self.first_start == True:
self.first_start = False
self.dlg = ExemploBufferDialog()

# show the dialog


self.dlg.show()

#adicionando as funções criadas


self.carregaVetor()
self.dlg.toolButton.clicked.connect(self.abrirVetor)
self.dlg.toolButton_2.clicked.connect(self.definirSaida)

# Run the dialog event loop


result = self.dlg.exec_()
# See if OK was pressed
if result:
#chamando as variaveis
self.variaveis()

#aplicando o buffer - usando a ferramenta do processamento do qgis


buffer = processing.run("native:buffer", {'INPUT': self.camada,
'DISTANCE': self.largura,
'DISSOLVE': False,
'END_CAP_STYLE': 0,
'JOIN_STYLE': 0,
'OUTPUT': self.saida})

#carregando o resultado em tela


self.iface.addVectorLayer(self.saida, str.split(os.path.basename(self.saida),".") [0],
"ogr")
pass

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 10 / 11


Prof. Afonso de Paula dos Santos
Etapa G. Formas de disponibilizar o plugin criado

https://youtu.be/k5sqL5NfdE0

Para disponibilizar o plugin criado para outros usuários do QGIS, há duas formas de proceder:

1. A partir de um arquivo .ZIP

2. A partir do repositório de plugins do QGIS

Roteiro: Desenvolvimento de um Plugin para o QGIS 3.X 11 / 11


Prof. Afonso de Paula dos Santos

Você também pode gostar