Como utilizar Python no QGIS (PyQGIS) para automatizar processos?

Aprenda a utilizar a linguagem de programação Python dentro do QGIS para agilizar seus trabalhos e eliminar os processos repetitivos.

Quando trabalhamos com Sistemas de Informações Geográficas (SIG), alguns trabalhos são bastante repetitivos, beirando à chatice.

Extrair, cortar, realizar analise, extrair, cortar, realizar analise. Quantas vezes você vai ficar repetindo esse processo? Por que não programar para realizar todo ele de uma vez só?

Já apresentamos como realizar esse tipo de procedimento utilizando o ArcGIS, e caso você queira mais detalhes sobre o que é Python, dê uma olhada na nossa postagem sobre como usar Python e a ferramenta Buffer no ArcGIS.

Nesta postagem, utilizaremos o QGIS 2.18 e Python para extrair o limite do município de Cocal do Sul (e de outros municípios), em seguida, iremos utilizar esse limite para recortar o mapa de solos do Estado de Santa Catarina.

Nos links abaixo, você poderá baixar os shapefiles que usaremos nesta postagem.

Como acessar o Python no QGIS (PyQGIS)?

Antes de adicionarmos qualquer shapefile, vamos abrir o terminal e o editor python do QGIS para escrever e executar nossos comandos.

Vá em Plugins e clique em Python Console (1). Provavelmente somente o Terminal será aberto, mas você pode habilitar o editor clicando em “Show Editor” (2), conforme figura abaixo.

Iniciando o módulo Python no QGIS 2.18.
Iniciando o módulo Python no QGIS 2.18.

Com todas essas janelas abertas, vamos começar a programar na janela que foi aberta quando clicamos em “Show Editor”.

Carregando shapefile usando PyQGIS

Agora, vamos carregar algumas bibliotecas e vamos utilizar a função addVectorLayer() para adicionar nossos dois shapefiles.


#!/usr/bin/env python
#coding: utf-8

# Carregando bibliotecas no Python
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
import processing
import sys

# Adicionando nossos arquivos shapefile
lim_mun = "C:/Users/ferna/Desktop/PyQGIS/42MUE250GC_SIR.shp"
solos_sc = "C:/Users/ferna/Desktop/PyQGIS/Solos_Santa_Catarina_250000_2004.shp"
iface.addVectorLayer(lim_mun, "Limites Municipais", "ogr")
iface.addVectorLayer(solos_sc, "Solos de SC", "ogr")

A função addVectorLayer recebe três parâmetros, são eles (1) o local onde foi salvo o shapefile; (2) nome da camada e (3) o identificador da fonte de dados, normalmente ogr.

Extraindo o limite municipal

Agora, com as camadas carregadas, iremos acessar os dados da camada “Limite Municipal” e por meio da ferramenta Extract by Attribute, iremos separar o limite do município de Cocal do Sul em um novo shapefile.

Iremos utilizar a função “processing” e dentro dela vamos especificar o algoritmo para extração de dado baseando-se em um atributo.


# Rodando algoritmo para extrair limites de Cocal do Sul
limCocal = "C:/Users/ferna/Desktop/PyQGIS/limCocal.shp"
processing.runalg('qgis:extractbyattribute', lim_mun, "NM_MUNICIP", 0, "COCAL DO SUL", limCocal)

Com o limite municipal de Cocal do Sul em mãos, já podemos rodar o nosso código seguinte para recortar os tipos de solos existentes dentro do município.

Cortando a partir de um polígono

Neste procedimento, utilizaremos a função Clip para recortar as classes de solo do município de Cocal do Sul.

Mas antes de executarmos esse código, nossos shapefiles estão em sistemas de projeção diferentes, isso pode ocasionar erros no momento do cruzamento dos mapas. Por isso, antes de rodar o código de recorte, vamos executar o qgis:reprojectlayer, para converter o shapefile do tipo de solo para SIRGAS2000.


# Convertendo os sistemas de coordenadas
Solos_SIRGAS = "C:/Users/ferna/Desktop/PyQGIS/Solos_SIRGAS.shp"
processing.runalg("qgis:reprojectlayer", solos_sc, "epsg:4674", Solos_SIRGAS)

# Recortando nossa area de estudo
solosCocal = "C:/Users/ferna/Desktop/PyQGIS/solosCocal.shp"
processing.runalg('qgis:clip', Solos_SIRGAS, limCocal, solosCocal)
iface.addVectorLayer(solosCocal, "Solos de Cocal do Sul", "ogr")

E dessa forma, conseguimos extrair os tipos de solos do município de Cocal do Sul.

Note que as funções Reproject Layer e Clip precisam dos seguintes argumentos:

  • Reproject Layer: (1) Arquivo de Entrada, (2) Sistema de Coordenadas Final, (3) Arquivo de Saída.
  • Clip: (1) Arquivo a ser cortado, (2) Limites do corte, (3) Arquivo de Saída.

Como realizar esse processo para varias cidades?

Para isso, vamos construir uma variável com os nosso municípios alvos (i.e. Ermo, Forquilhinha, Nova Veneza e Garopaba) e em seguida, criaremos um loop do tipo for para rodar todos eles, veja abaixo.


# Extraindo multiplos mapas de solo com um loop
cidades = ["ERMO", "FORQUILHINHA", "NOVA VENEZA", "GAROPABA"]
for n in cidades:
  limite = "C:/Users/ferna/Desktop/PyQGIS/lim" + n +".shp"
  processing.runalg('qgis:extractbyattribute', lim_mun, "NM_MUNICIP", 0, n, limite)
  solos = "C:/Users/ferna/Desktop/PyQGIS/solos" + n + ".shp"
  processing.runalg('qgis:clip', Solos_SIRGAS, limite, solos)
  iface.addVectorLayer(solos, "Solos de " + n , "ogr")

Note que após realizar esse processo, você poderá substituir a variável cidades pelos municípios que você deseja, desde que o nome esteja igual ao nome do município no shapefile com os limites municipais.

Obs.: Estou pesquisando como extrair os municípios que apresentam caracteres especiais em seus nomes (i.e. acentos, cedilhas), pois até agora, não consegui extrair o shape de solos deles. Até onde pesquisei, tem a ver com a codificação dos caracteres (UTF-8). Caso você tenha a resposta, deixe ela nos comentários que estaremos agradecendo e atualizando a postagem.

[Atualização em 18/06/2018]

Corrigindo o problemas de Encoding

Depois de pesquisar um pouco sobre como converter um shapefile para um Encoding diferente, conseguimos realizar o procedimento anterior para municípios com acentos.

O novo código tem uma parte para realizar essa correção, onde carregamos novamente o shapefile (função QgsVectorLayer()) e em seguida salvamos ele num novo formato (função QgsVectorFileWrite().writeAsVectorFormat())

Lembre-se também de colocar um “u” na frente dos textos que contém acentos, como fizemos na variável cidades.

Confira o código completo abaixo.


# -*- coding: utf-8 -*-

# Carregando pacotes no Python
import processing
import sys
import osgeo.ogr as ogr
import osgeo.osr as osr

# Carregando nossos arquivos shapefile
lim_mun = "C:/Users/ferna/Desktop/PyQGIS/42MUE250GC_SIR.shp"
solos_sc = "C:/Users/ferna/Desktop/PyQGIS/Solos_Santa_Catarina_250000_2004.shp"

# Convertendo os sistemas de coordenadas
Solos_SIRGAS = "C:/Users/ferna/Desktop/PyQGIS/Solos_SIRGAS.shp"
processing.runalg("qgis:reprojectlayer", solos_sc, "epsg:4674", Solos_SIRGAS)

# Corrigindo Encoding
Camada = QgsVectorLayer(lim_mun, None, 'ogr')
Camada.setProviderEncoding("utf8")
Camada.dataProvider().setEncoding("utf8")

lim_UTF8 = "C:/Users/ferna/Desktop/PyQGIS/lim_UTF8.shp"
QgsVectorFileWriter.writeAsVectorFormat(Camada, lim_UTF8, "utf_8_encode", Camada.crs(), "ESRI Shapefile")

# Extraindo vários itens com acentos
cidades = [u"CRICIÚMA", u"MORRO DA FUMAÇA"]
for n in cidades:
  limite = "C:/Users/ferna/Desktop/PyQGIS/lim" + n +".shp"
  processing.runalg('qgis:extractbyattribute', lim_UTF8, "NM_MUNICIP", 0, n, limite)
  solos = "C:/Users/ferna/Desktop/PyQGIS/solos" + n + ".shp"
  processing.runalg('qgis:clip', Solos_SIRGAS, limite, solos)
  iface.addVectorLayer(solos, "Solos de " + n , "ogr")

Caso tenha ficado com alguma dúvida, deixe ela nos comentários que estaremos respondendo assim que possível.



Clique na figura abaixo e assine nossa lista de emails para receber nosso ebook "Como criar mapas de localização com ArcGIS 10.x".


Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de recuperação ambiental, geoprocessamento e ciência do solo. Busca soluções utilizando softwares como ArcGIS, R e MATLAB.

36 thoughts on “Como utilizar Python no QGIS (PyQGIS) para automatizar processos?”

  1. Boa tarde, Fernando!
    Acabei de conhecer o site de vocês já agradeço pela iniciativa de compartilhar o conhecimento.

    Sou geógrafo e tenho me aventurado bastante pela área do PyQGIS e do WebGIS com o Geoserver+Leaflet.
    Apesar de achar alguns cookbooks na internet, quando se trata de pyqgis as aplicações e grupos de discussão são escassos.

    Respondo muitos processos sobre zoneamento de plano diretor e zoneamento de risco e quero automatizar essa tarefa. Para tal, estou tentando criar um plugin por meio do Qt Designer, mas minha limitação está no código. Talvez você possa me ajudar.

    A lógica do plugin é a seguinte: 1º Inserção de coordenadas UTM de um ou mais pontos;
    2º Seleção de checkbox ( Zoneamento do Plano Diretor ou Zoneamento de Risco Geológico);
    3° Rodar >>>Gerar um mapa em pdf com as informações;

    Preciso de auxílio para codificar a criação de um ponto a partir das coordenadas UTM, para condicionar (“for”) a resposta (informação) a partir da localização do ponto gerado sobre as shapefiles, para que isso gere um layout de impressão padronizado ( escalas, zoom, legenda, norte, campo de texto sempre no mesmo espaço, número do processo etc) e gerar o pdf ou jpeg.

    1. Boa noite Leonardo,

      Que bom que você gostou do nosso conteúdo. Também estou aprendendo a programar em Python e postando os resultados aqui no Blog.

      Com relação à dificuldade na parte de programação, você pode conferir alguns cursos online de Python (ex. http://excript.com/curso-de-python.html) ou de PyQGIS (pesquisei na Udemy.com e há três opções de curso em inglês).

      Estarei buscando como realizar esse procedimento que você apresentou, assim que eu obtiver resultados, estarei postando aqui no blog.

  2. Parabéns pelo blog, é uma excelente iniciativa diante da qualidade duvidosa dos inúmeros sites sobre QGIS, em português.
    O tutorial sobre como criar um plugin no QGIS usando python ficou muito didático e claro. E a compreensão das linhas de comando, que eu também senti falta, esse curso gratuito que você indicou é excelente http://excript.com/curso-de-python.html
    Obrigado por compartilhar seu conhecimento!

    1. Hola Eddison,

      El archivo 42MUE250GC_SIR.shp se puede descargar aquí: ftp://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/UFs/SC/sc_municipios.zip

      Y el otro archivo (Solos_Santa_Catarina…) es este aquí: http://ciram.epagri.sc.gov.br/ciram_arquivos/arquivos/iff/zip/solos_santa_catarina_250000_2004.zip

      Gracias por tu comentario y si necesitas alguna ayuda, es sólo comentar por aquí.

      1. Muchas gracias!! muy amable de su parte por su tiempo al responder, soy neofito en PYQGIS pero deseo aprender, antes de iniciar esos procesos funcionan en la version QGIS 3.x? Saludos, Eddison

        1. El código es diferente para el QGIS 3, porque han cambiado algunos elementos de la función “Processing” (ahora recibe como argumento un diccionario) y en el ejemplo siguiente, no puedo reproducir con caracteres especiales.

          # -*- coding: utf-8 -*-

          # Carregando pacotes no Python
          import processing
          import sys
          import osgeo.ogr as ogr
          import osgeo.osr as osr

          # Carregando nossos arquivos shapefile
          lim_mun = “C:/Users/ferna/Desktop/PyQGIS/42MUE250GC_SIR.shp”
          solos_sc = “C:/Users/ferna/Desktop/PyQGIS/Solos_Santa_Catarina_250000_2004.shp”

          # Convertendo os sistemas de coordenadas
          Solos_SIRGAS = “C:/Users/ferna/Desktop/PyQGIS/Solos_SIRGAS.shp”
          param_Reproj = {‘INPUT’: solos_sc, ‘TARGET_CRS’: “epsg:4674”, ‘OUTPUT’: Solos_SIRGAS}
          processing.run(“qgis:reprojectlayer”, param_Reproj)

          # Corrigindo Encoding
          Camada = QgsVectorLayer(lim_mun, None, ‘ogr’)
          Camada.setProviderEncoding(“utf8”)
          Camada.dataProvider().setEncoding(“utf8”)

          lim_UTF8 = “C:/Users/ferna/Desktop/PyQGIS/lim_UTF8.shp”
          QgsVectorFileWriter.writeAsVectorFormat(Camada, lim_UTF8, “utf_8_encode”, Camada.crs(), “ESRI Shapefile”)

          # Extraindo vários itens com acentos
          cidades = [“TREVISO”, “VIDEIRA”, “MAFRA”]
          for n in cidades:
          limite = “C:/Users/ferna/Desktop/PyQGIS/lim” + n +”.shp”
          param_ExtAtt = {‘INPUT’: lim_UTF8, ‘FIELD’: “NM_MUNICIP”, ‘OPERATOR’: 0, ‘VALUE’: n, ‘OUTPUT’: limite}
          processing.run(‘qgis:extractbyattribute’, param_ExtAtt)
          solos = “C:/Users/ferna/Desktop/PyQGIS/solos” + n + “.shp”
          param_Clip = {‘INPUT’: Solos_SIRGAS, ‘OVERLAY’: limite, ‘OUTPUT’: solos}
          processing.run(‘qgis:clip’, param_Clip)
          iface.addVectorLayer(solos, “Solos de ” + n , “ogr”)

          1. Hola gracias! pero entonces varias preguntas:

            1: Para seleccionar el limite limCocal el comando siguiente queda igual en QGIS 3.x?

            # Rodando algoritmo para extrair limites de Cocal do Sul
            limCocal = “C:/Users/ferna/Desktop/PyQGIS/limCocal.shp”
            processing.runalg(‘qgis:extractbyattribute’, lim_mun, “NM_MUNICIP”, 0, “COCAL DO SUL”, limCocal)

            2: (ok veo que este comando si es diferente para QGIS 3.x)

            # Convertendo os sistemas de coordenadas
            Solos_SIRGAS = “C:/Users/ferna/Desktop/PyQGIS/Solos_SIRGAS.shp”
            param_Reproj = {‘INPUT’: solos_sc, ‘TARGET_CRS’: “epsg:4674”, ‘OUTPUT’: Solos_SIRGAS}
            processing.run(“qgis:reprojectlayer”, param_Reproj)

            3:
            Y si deseo cortar (clip) solo un elementos como limCocal, el siguiente comando queda igual?

            # Recortando nossa area de estudo
            solosCocal = “C:/Users/ferna/Desktop/PyQGIS/solosCocal.shp”
            processing.runalg(‘qgis:clip’, Solos_SIRGAS, limCocal, solosCocal)
            iface.addVectorLayer(solosCocal, “Solos de Cocal do Sul”, “ogr”)

            Muchas Gracias

            Eddison

  3. Hola Eddison,

    Respondiendo sus preguntas:
    1. No, el comando processing.runalg() cambió en QGIS 3, el correcto sería processing.run (‘qgis: extractbyattribute’, param_ExtAtt) – Donde param_ExtAtt son los parámetros de qgis: extractbyattribute (y el resto queda igual).
    2. Eso mismo.
    3. La misma cosa que la primera pregunta. El correcto sería: processing.run (‘qgis: clip’, param_Clip)

    1. Oi Fernando,

      Mesmo estes comandos que você indicou não funcionam no Qgis 3.4, você tem alguma sugestão ou exemplo que poderia passar.

      E parabéns pelos exemplos, muito bom.

      1. Bom dia Thiago, obrigado pelo comentário.

        Estranho não estarem funcionando, li que o comando havia mudado para este que passei no outro comentário. Você pode consultar outros exemplos, inclusive de onde eu peguei a informação da mudança, nos seguintes links:

        Documentação do QGIS 3.4: https://docs.qgis.org/3.4/en/docs/user_manual/processing/console.html
        Exemplos de PyQGIS: https://anitagraser.com/pyqgis-101-introduction-to-qgis-python-programming-for-non-programmers/

  4. Hola! trato de aprender y entusiasmado con este blog!
    Intento realizar un merge usando esta funcion:

    import processing

    nom_layer_carret = r’C:/CURSO_PYQGIS/CAPAS/carreteras.shp’
    nom_layer_rios = r’C:/CURSO_PYQGIS/CAPAS/rios.shp’
    nom_resultado = r’C:/CURSO_PYQGIS/CAPAS_PROCESADAS/elementos_lineales.shp’

    parameters ={‘LAYERS’:[nom_layer_carret,nom_layer_rios],’CRS’:’EPSG:4326′,’OUTPUT’:nom_resultado}
    feedback = QgsProcessingFeedback()
    processing.runAndLoadResults(‘native:mergevectorlayers’,parameters,feedback=feedback)

    Hice una carpeta en C que le llamé CURSO_PYQGIS, adjunto datos:

    https://www.dropbox.com/sh/rx812mu7vj9trd1/AACtFtsOyKEFuN6D1SKUhACna?dl=0
    y el script utilizado:

    https://www.dropbox.com/s/uqbn0kkilsqdtpu/merge.py?dl=0

    Cuando ejecuto me da error y no lo puedo unir usando el comando, creo que el problema está en una columna llamada ScaleRank, que en un mapa es double y en el otro es intero.

    Yo deseo correr todo usando un script y quiero hacerlo con native:mergevectorlayers, donde en el mapa final que he llamado nom_resultado (elementos_lineales.shp) estén todas las columnas y filas de ambos mapas!

    Gracias!
    Eddison

    Traceback (most recent call last):
    File “C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\code.py”, line 90, in runcode
    exec(code, self.locals)
    File “”, line 1, in
    File “”, line 10, in
    File “C:/PROGRA~1/QGIS3~1.4/apps/qgis/./python/plugins\processing\tools\general.py”, line 121, in runAndLoadResults
    return Processing.runAlgorithm(alg, parameters=parameters, onFinish=handleAlgorithmResults, feedback=feedback, context=context)
    File “C:/PROGRA~1/QGIS3~1.4/apps/qgis/./python/plugins\processing\core\Processing.py”, line 183, in runAlgorithm
    raise QgsProcessingException(msg)
    _core.QgsProcessingException: Hubo errores al ejecutar el algoritmo.

    1. Buenos días Eddison,

      Algunas sugerencias para probar en su código:

      1) Colocar en la parte superior del código: “import qgis.core” y luego cambiar “feedback = QgsProcessingFeedback()” por “feedback = qgis.core.QgsProcessingFeedback()” (https://gis.stackexchange.com/questions/286137/how-to-set-the-layers-parameter-of-the-qgis-3-algorithm-nativemergevectorlay).

      2) Cambiar “processing.runAndLoadResults(‘native:mergevectorlayers’,parameters,feedback=feedback)” por “processing.run(‘native:mergevectorlayers’,parameters,feedback=feedback)” y cargar el resultado con otro código (e.g. iface.addVectorLayer(nom_resultado, “Resultado”, “ogr”))

  5. Hola un gusto saludarle, por medio de este comando paso a mi TOC de QGIS un mapa de puntos de un GPS:

    uri= “C:\CURSO_PYQGIS\CAPAS\puntos.gpx?type=waypoint”

    gpx_layer=QgsVectorLayer(uri, “capa de gps3″,”gpx”)

    QgsProject.instance().addMapLayer(gpx_layer)

    Pero si ahora quiero pasar mi capa gpx a formato shapefile desde la consola de python de QGIS, como se puede hacer?

    El dato se llama puntos.gpx y está aquí: https://www.dropbox.com/sh/rx812mu7vj9trd1/AACtFtsOyKEFuN6D1SKUhACna?dl=0

    El archivo se llama puntos.gpx y quiero convertirlo a shapefile

    Gracias

    Eddison

    1. Hola, ya pude, usé esto:

      QgsVectorFileWriter.writeAsVectorFormat(gpx_layer,r”C:\CURSO_PYQGIS\CAPAS_PROCESADAS\gps.shp”,”UTF-8″,QgsCoordinateReferenceSystem(4326),”ESRI Shapefile”)

      Tomé el ejemplo del Blog con otro mapa y me ha funcionado, muchas gracias!

  6. Hola, disculpen si la pregunta es muy básica, pero si tengo en una variable la capa activa:

    clayer=iface.mapCanvas().currentLayer()

    Como puedo por medio de un print que me aparezca el nombre de la capa en la consola?

    Gracias

    Eddison

    1. Es que si uso esto:
      clayer=qgis.utils.iface.mapCanvas().currentLayer()

      print (clayer.id())

      Me aparece esto:
      ciudades20140210133917934

      Yo quiero que solo diga ciudades en la consola! y no lo logro hacer.

      Gracias
      Eddison

        1. Hola Eddison,

          Voy a tratar de responder a todos sus comentarios aquí. Veamos el primero, cómo convertir GPX a Shapefile usando PyQGIS. También puede utilizar el algoritmo “gdalogr: convertformat”, como se indica a continuación:

          processing.runalg (‘gdalogr: convertformat’, “Capa de entrada”, 0, ”, “Capa de salida”)

          Otros formatos de conversión se pueden ver aquí:
          https://docs.qgis.org/2.8/en/docs/user_manual/processing_algs/gdalogr/ogr_conversion.html

          Con respecto a los nombres de las capas, puede intentar uno de los códigos que aparecen en los vínculos de StackExchange.

          Obtener lista de nombres de capas con PyQGIS: https://gis.stackexchange.com/questions/118862/get-a-list-of-layer-names-using-pyqgis
          Obtener capa por nombre con PyQGIS: https://gis.stackexchange.com/questions/136861/getting-layer-by-name-in-pyqgis

          1. Hola, para conocer los nombres he revisado los links que me has enviado, pero esto:
            for layer in QgsMapLayerRegistry.instance().mapLayers().values():
            print layer.name()

            No funciona en QGIS 3, se me ocurrió poner esto:

            for layer in QgsProject.instance().mapLayers().values():
            print layer.name()

            Y de esa manera si ha funcionado, gracias,Eddison

  7. Es que localicé esto:
    addProject
    virtual bool QgisInterface::addProject ( const QString & project )

    Pero no comprendo como se escribe en la linea de comandos para luego leerlo y que aparezca el proyecto:

    addProject(r” D:\PRUEBA\mapas.qgs”), pero hago cosas mal y no puedo agregarlo, entonces en resumen:

    1. Como agregar el proyecto mapas.qgs que tengo en D:\PRUEBA
    2. Como salvar el proyecto de nuevo
    3. Como salvar el proyecto con un nombre nuevo

    Muchas gracias

    Eddison

    1. Buenas noches Eddison,

      A continuación se muestra el código con los comentarios para ayudar a responder a sus preguntas (probado en QGIS 3):

      from qgis.core import QgsProject

      # Crea una variable para almacenar proyecto vacío
      projeto = QgsProject.instance()

      # Cargar / agregar proyecto
      projeto.read(‘C:/Users/ferna/Desktop/teste.qgz’)

      # Salvar proyecto
      projeto.write(‘C:/Users/ferna/Desktop/teste2019.qgz’)

      # Nuevo nombre para el proyecto (concatenar)
      nomeNovo = ‘umNovoProjeto’
      projeto.write(‘C:/Users/ferna/Desktop/’ + nomeNovo + ‘.qgz’)

      # Muestra el nombre y la ruta del proyecto en el indicador
      print(projeto.fileName())

  8. Oi Fernando!
    Interessante sua dúvida.
    Comecei a estudar o Python na ânsia de desenvolver uma rotina que elaborasse mapas de diagnóstico urbano de forma automática mas assim como você acabei esbarrando na limitação do código.
    Espero que tenha conseguido resolver seu problema.

    Abraço!

    1. Boa tarde Jhonne,

      A parte de encoding volta e meia incomoda, mas ao poucos vamos aprendemos melhor a linguagem de programação e superamos esses obstáculos.

  9. Bom dia Fernando,

    Estou tentanto instalar o plugin CKANBrowser no QGIS e está dando o seguinte erro:
    “ImportError: PyQt4 classes cannot be imported in QGIS 3.x. Use PyQt5.QtCore or the version independent qgis.PyQt.QtCore import instead. ”

    Tem ideia de como posso resolver isto?

    Cordialmente,

    1. Boa tarde Danilo,

      Qual versão você esta usando do QGIS? Pela mensagem de erro, parece que o plugin não é compatível com o QGIS 3.x.

      O que você pode tentar é instalar uma versão mais antiga (ex. 2.18) e rodar o plugin.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *