Skip to content

Instantly share code, notes, and snippets.

@marcellobenigno
Created November 26, 2021 13:56
Show Gist options
  • Save marcellobenigno/b041dbb39aabfd7b6559401b8f17f4ad to your computer and use it in GitHub Desktop.
Save marcellobenigno/b041dbb39aabfd7b6559401b8f17f4ad to your computer and use it in GitHub Desktop.
Aula do dia 26/11
pasta = '/Users/marcellodebarrosfilho/code/curso_pyqgis_udemy/dados/'
geopackage = 'pb.gpkg'
param = '|layername='
caminho = pasta + geopackage + param + 'municipios'
municipios = QgsVectorLayer(caminho, 'municipios', 'ogr')
QgsProject.instance().addMapLayer(municipios)
for campo in municipios.fields():
print(campo.name(), campo.typeName())
# Resultado:
# fid Integer64
# nome String
# cod_ibge_m String
# slug String
# microregiao String
# mesoregiao String
# populacao_rural Integer
# populacao_urbana Integer
# populacao_total Integer
iface.showAttributeTable(municipios)
for feicao in municipios.getFeatures():
print(f"Município: {feicao['nome']}, Pop. Total: {feicao['populacao_total']}")
sql_filter = """ "mesoregiao" = 'Sertão Paraibano' """
request = QgsFeatureRequest()
request.setFilterExpression(sql_filter)
# filtrar no mapa em função do sql_filter
municipios.setSubsetString(sql_filter)
iface.zoomToActiveLayer()
for feicao in municipios.getFeatures(request):
print(f"Município: {feicao['nome']}, Mesoregião: {feicao['mesoregiao']}")
# criando uma seleção na camada:
sql_filter = """ "populacao_total" > 10000 """
municipios.selectByExpression(sql_filter)
ids = municipios.selectedFeatureIds()
selecao_pop_maior_10000 = municipios.materialize(
QgsFeatureRequest().setFilterFids(municipios.selectedFeatureIds())
)
QgsProject.instance().addMapLayer(selecao_pop_maior_10000)
selecao_pop_maior_10000.setName('selecao')
# criar uma nova camada na memória contendo apenas o município de Campina Grande
# 1. Criar um filtro SQL
filtro_sql = """ "nome" = 'Campina Grande' """
# 2. Utilizar o filtro para selecionar as feições na camada
municipios.selectByExpression(filtro_sql)
# 3. Criar uma camada temporária a partir da seleção
ids = municipios.selectedFeatureIds()
campina_grande = municipios.materialize(
QgsFeatureRequest().setFilterFids(municipios.selectedFeatureIds())
)
# 4. Adicionar a camada na interface do QGIS
QgsProject.instance().addMapLayer(campina_grande)
# 5. Modificar o nome da camada
campina_grande.setName('Campina Grande')
# 6. Dar um zoom na camada
iface.zoomToActiveLayer()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment