Lista de Exercícios Resolvidos: Java | Python | VisuAlg | Portugol | C | C# | VB.NET | C++
Você está aqui: QGIS ::: PyQGIS API ::: Projeto QGIS - Classe QgsProject

Como retornar o título do projeto do QGIS usando PyQGIS e a função title() da classe QgsProject

Quantidade de visualizações: 22 vezes
Em algumas situações nós precisamos obter o título do projeto atual do QGIS. Para isso nós podemos usar a função title() da classe QgsProject da PyQGIS API.

Note que o título do projeto do QGIS é definido indo no menu Projeto -> Propriedades. Na janela Propriedades nós acessamos a guia Geral e definimos no campo Título do Projeto o valor que desejamos.

Veja o código PyQGIS completo que acessa e exibe o título do projeto em uma mensagem QMessageBox.information:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# vamos obter o título do projeto do QGIS
titulo = QgsProject.instance().title()
 
# e mostramos o resultado
QMessageBox.information(None, "Aviso", "O título do projeto é: " +
  titulo)

Ao executar este código PyQGIS nós teremos um resultado parecido com:

O título do projeto é: Estudo hidrológico cliente AFG Rio Verde-GO

Link para compartilhar na Internet ou com seus amigos:

QGIS ::: PyQGIS API ::: Aplicações com código fonte completo

Como listar os 5 municípios goianos com maior área em uma camada do QGIS usando PyQGIS - Código Python completo

Quantidade de visualizações: 231 vezes
Este código completo mostra uma aplicação QGIS na qual usei PyQGIS para resolver um desafio muito interessante, e complexo. Acredito que servirá de base para muitos códigos interessantes envolvendo QGIS, Python e PyQGIS.

Comecei fazendo o download do shapefile do Estado de Goiás, contendo seus 246 municípios no site do IBGE. Em seguida carreguei o shapefile no QGIS usando um objeto QgsVectorLayer.

Note que criei uma classe Municipio para guardar cada um dos municípios encontrados no shapefile. E, para agrupar os objetos da classe Municipio eu criei uma lista chamada municipios.

Para acessar cada um dos municipios, ou seja, cada uma das 246 feições da camada, eu usei a função getFeatures() da classe QgsVectorLayer. Então, ao percorrer cada uma dessas feições, eu obtive seus atributos, por meio da função attributes(), e os usei para criar os objetos da classe Municipio.

Uma vez obtida a lista de municípios, o passo seguinte foi classificar a lista por ordem crescente de área (a área dos municípios). Um laço for me permitiu listar apenas os 5 municípios com maiores áreas e, além de registrar o somatório de seus áreas, obter os seus códigos para selecioná-los na camada, usando a função selectByExpression().

O desafio final foi mostrar as labels, ou seja, os rótulos de cada um dos municípios no mapa do QGIS, porém, eu queria mostrar os rótulos apenas dos 5 municípios com as maiores áreas. Para resolver o desafio, lancei mão da função setFilterExpression().

Veja o código completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# uma classe para guardar cada um dos municípios
# do Estado de Goiás
class Municipio:
  # método construtor
  def __init__(self, codigo, nome, estado, area):
    self.codigo = codigo
    self.nome = nome
    self.estado = estado
    self.area = area
  
# para guardar os municípios
municipios = []
  
# vamos criar um novo objeto QgsVectorLayer com o local
# do nosso shapefile
camada = QgsVectorLayer("C:\\GOIAS\\GO_Municipios_2022.shp",
  "Municípios do Estado de Goiás", "ogr")
 
# vamos testar se a camada é válida  
if not camada.isValid():
  print("Não foi possível carregar a camada %s" % camada.name())
else:
  # vamos percorrer todas as feições da camada
  # e obter os seus atributos
  feicoes = camada.getFeatures()  
  for f in feicoes:
    # vamos obter os atributos desta feição
    atributos = f.attributes()  
    # e criamos um novo objeto da classe Municipio
    municipio = Municipio(atributos[0], atributos[1],
      atributos[2], atributos[3])
    # adicionamos este município na lista
    municipios.append(municipio)
    
  # agora vamos ordenar a lista por área da maior para
  # a menor  
  municipios = sorted(municipios, 
    key=lambda municipio:municipio.area, reverse=True)
  
  # vamos adicionar a camada à relação de camadas  
  QgsProject.instance().addMapLayer(camada)
  
  # vamos calcular a área ocupada pelos 5 maiores municípios
  # do Estado de Goiás
  area_5_maiores = 0
  for i in range(5):
    area_5_maiores = area_5_maiores + municipios[i].area
  
  # agora vamos selecionar os 5 maiores municípios na
  # camada do QGIS  
  codigos = ""
  
  for i in range(5):
    codigos = codigos + municipios[i].codigo + ", "
  
  codigos = codigos[0:len(codigos) - 2]
  camada.selectByExpression('"CD_MUN" IN (' + codigos + ')')
  
  # e mostramos os resultados
  print("Os 5 maiores municípios do Estado de Goiás são:\n")
  for i in range(5):
    print("{0}) {1} - Área: {2} km2".format(i + 1, municipios[i].nome,
      municipios[i].area))
  print("\nÁrea ocupada pelos 5 maiores municípios: {0} km2".format(
    area_5_maiores))
    
  # finalmente vamos exibir os nomes dos municípios. Essa foi
  # a parte mais desafiadora do código, pois eu queria mostrar
  # somente os rótulos dos cinco maiores municípios
  settings = QgsPalLayerSettings()
  settings.isExpression = True
  settings.placement = QgsPalLayerSettings.Line
  settings.placement = QgsPalLayerSettings.Horizontal
  # mostra o nome do município
  settings.fieldName = "NM_MUN"

  format = QgsTextFormat()
  format.setColor(QColor('Black'))
  
  settings.setFormat(format)
  settings.enabled = True

  # cria e adiciona uma nova regra
  root = QgsRuleBasedLabeling.Rule(QgsPalLayerSettings())
  rule = QgsRuleBasedLabeling.Rule(settings)
  rule.setDescription("5 Maiores Municípios do Estado de Goiás")
  
  # define o campo que será usado no filtro. Note que somente
  # serão listados os rótulos dos municípios com área maior ou
  # igual ao quinto elemento da lista municípios
  campo_area = "AREA_KM2"
  rule.setFilterExpression(f"\"{campo_area}\" >= {municipios[4].area}")
  root.appendChild(rule)

  # define as configurações do rótulo
  camada.setLabelsEnabled(True)
  rules = QgsRuleBasedLabeling(root)
  camada.setLabeling(rules)
  # redesenha a camada no canvas do QGIS
  camada.triggerRepaint() 

Ao executar este código QGIS, Python e PyQGIS nós teremos o seguinte resultado:

Os 5 maiores municípios do Estado de Goiás são:

1) Niquelândia - Área: 9846.293 km2
2) Mineiros - Área: 9042.844 km2
3) Caiapônia - Área: 8627.961 km2
4) Rio Verde - Área: 8374.255 km2
5) Nova Crixás - Área: 7308.681 km2

Área ocupada pelos 5 maiores municípios: 43200.03399999999 km2

Para fins de compatibilidade este código foi escrito e testado no QGIS 3.34.5-Prizren.


QGIS ::: PyQGIS API ::: Shapefiles, Camadas Vetoriais, Dados Vetoriais

Como saber o sistema de coordenadas de um shapefile no QGIS usando a função crs() do objeto QgsVectorLayer da PyQGIS API

Quantidade de visualizações: 211 vezes
Em algumas situações nós gostaríamos de saber o sistema de coordenadas usado em um shapefile que carregamos ou pretendemos carregar para os nossos projetos no QGIS. Para isso podemos usar a função crs() do objeto QgsVectorLayer da PyQGIS API.

Esta função retorna um objeto da classe QgsCoordinateReferenceSystem, que possui uma função chamada description(), que retorna a descrição do sistema de coordenadas usado no shapefile.

Veja o código PyQGIS completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# vamos criar um novo objeto QgsVectorLayer com o local do nosso shapefile
camada = QgsVectorLayer("C:\\GO_Municipios_2022\\GO_Municipios_2022.shp",
  "Municípios Estado de Goiás", "ogr")

# vamos testar se a camada é válida  
if not camada.isValid():
  print("Não foi possível carregar a camada %s" % camada.name())
else:
  # vamos adicionar a camada à relação de camadas  
  QgsProject.instance().addMapLayer(camada)
  
  # vamos exibir o sistema de coordenadas da camada
  sistema_coordenadas = camada.crs()
  print(sistema_coordenadas.description())

Ao rodar esse código PyQGIS no QGIS nós teremos o seguinte resultado:

EPSG 4674 / SIRGAS 2000


QGIS ::: PyQGIS API ::: Projeto QGIS - Classe QgsProject

Como definir o título do projeto do QGIS usando PyQGIS e a função setTitle() da classe QgsProject

Quantidade de visualizações: 21 vezes
Nesta dica mostrarei como podemos definir o título do projeto do QGIS usando PyQGIS. Para isso nós vamos usar a função setTitle() da classe QgsProject da PyQGIS API.

Note que o título do projeto do QGIS pode ser definido manualmente indo no menu Projeto -> Propriedades. Na janela Propriedades nós acessamos a guia Geral e definimos no campo Título do Projeto o valor que desejamos.

Veja o código PyQGIS completo que mostra como definir o título do projeto atual do QGIS:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# vamos definir o título do projeto do QGIS
titulo = "Projeto Empresa X Goiânia-GO"
QgsProject.instance().setTitle(titulo)
 
# e mostramos uma mensagem
QMessageBox.information(None, "Aviso",
  "O título do projeto foi definido com sucesso")

Ao executar este código PyQGIS nós teremos um resultado parecido com:

O título do projeto foi definido com sucesso


Vamos testar seus conhecimentos em Hidrologia

A transpiração é um processo fundamental na contribuição para o acúmulo de água em estado gasoso na atmosfera. Qual agente é um dos principais atores nesse processo?

A) Rochas.

B) Solos férteis.

C) Chuvas.

D) Seres vivos.

E) Minerais.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira

Perfil em aço

As conexões dos perfis de aço contribuem para a projetação das estruturas de uma edificação, sendo responsáveis pela ligação entre pilares e vigas ou entre outros elementos. Elas podem variar, dependendo do tipo de esforço que se pretende resistir com o elemento estrutural.

Considerando a figura apresentada a seguir, assinale a alternativa que indica corretamente o tipo de conexão que está sendo utilizado para unir essas peças.



A) Conexão de cisalhamento.

B) Conexão de momento com pinos.

C) Conexão de cisalhamento com solda.

D) Conexão de momento com solda.

E) Conexão de tensão com solda.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Python

Qual o resultado da execução do seguinte código Python?

valor = 5
if valor % 3 > 2:
  print("Verdadeiro")
else:
  print("Falso")

A) Verdadeiro

B) Erro SyntaxError: invalid syntax na linha 2

C) Falso

D) Erro IndentationError: expected an indented block

E) O código é executado sem erros mas não mostra nenhuma saída.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil

Formas: Confecção e colocação

Em relação aos materiais utilizados para formas, assinale a alternativa correta.

A) A fibra de vidro é muito utilizada para pilares e vigas.

B) Formas em poliestireno expandido são altamente reaproveitadas.

C) Vidro é muito utilizado para concreto aparente.

D) Tubos de papelão são muito usados em pilares de seção circular e em estruturas com caixão perdido.

E) As tábuas são os materiais que proporcionam o maior reaproveitamento.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Analise o seguinte trecho de código JavaScript

var valores = new Array(2, 4);

Este código

A) cria uma matriz chamada valores com 2 linhas e 4 colunas.

B) cria um array valores e atribui os valores 2 e 4 para valores[1] e valores[2].

C) cria um array valores e atribui os valores 2 e 4 para valores[0] e valores[1].

D) cria um array de três elementos com os índices variando de 2 até 4.
Verificar Resposta Estudar Cards Todas as Questões

Veja mais Dicas e truques de QGIS

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 23 usuários muito felizes estudando em nosso site.