Skip to content

Instantly share code, notes, and snippets.

@kylefelipe
Last active October 25, 2021 22:47
Show Gist options
  • Save kylefelipe/9a4c64f6a4573da9722b19c83bfdb9dd to your computer and use it in GitHub Desktop.
Save kylefelipe/9a4c64f6a4573da9722b19c83bfdb9dd to your computer and use it in GitHub Desktop.
Criando uma camada virtual a partir de uma query SQL usando PyQGIS

SQL + Virtual Layers + PyQGIS

# Estados que queremos pegar os municípios
nomes = ['Minas Gerais', 'Paraíba', 'Espírito Santo', 'Goiás', 'Sergipe']
nomes = [f"'{nome}'" for nome in nomes]

# Pegando apenas as feições que precisamos 
estados = QgsProject.instance().mapLayersByName('lim_unidade_federacao_a')[0]
subset_string = f"nome in ({','.join(nomes)})"
estados.setSubsetString(subset_string)
# Gerando uma camada com para cada estado com seus municípios
for feature in estados.getFeatures():
    SQL = f"SELECT * FROM lim_municipio_a WHERE geocodigo like '{feature['geocodigo']}%'"
    vlayer = QgsVectorLayer(f"?query={SQL}", f"Municipios_{feature['nome']}", 'virtual')
    QgsProject.instance().addMapLayer(vlayer)

É possível gerar camadas virtuais usando #SQL e #PyQGIS, e pode ser uma mão na roda!
Nesse exemplo, temos duas camadas, uma de municípios e uma de estados.
Filtramos os estados que queremos e usamos o nome para gerar o nome da nova camada, e o campo geocódigo para filtrar os municípios.
Os dois primeiros dígitos do geocódigo do municipio correspondem ao geocódigo do estado.
Uma vantagem de se trabalhar com camada virtual é que cada alteração feita na camada de base (municipios) reflete na virtual.
Ex.: Se um município mudar de estado.

Documentação QgsVectorLayer

Lives de PyQGIS

Repositório das Lives

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment