Skip to content

Instantly share code, notes, and snippets.

@kylefelipe
Created August 22, 2020 22:00
Show Gist options
  • Select an option

  • Save kylefelipe/0915b760f50768e1dc813fdb9dcd6abe to your computer and use it in GitHub Desktop.

Select an option

Save kylefelipe/0915b760f50768e1dc813fdb9dcd6abe to your computer and use it in GitHub Desktop.
Faz transposição de dados usando como coluna os valores no segundo campo da da camada e o terceiro como valores. A camada a ser transposta precisa estar ativa no painel de camadas.
"""
Faz transposição de dados usando como coluna os valores no segundo campo da
da camada e o terceiro como valores.
A camada a ser transposta precisa estar ativa no painel de camadas.
"""
from copy import copy
from qgis.PyQt.QtCore import QVariant
id_origem = copy(iface.activeLayer().id())
origem = QgsProject.instance().mapLayer(id)
fields_origem = origem.fields()
features_origem = origem.getFeatures()
new_fields = set(new_field[1] for new_field in origem.getFeatures())
# Criando camada a receber os novos dados
destino = QgsVectorLayer(f"Point?epsg:4326", "dado_pivotado", "memory")
QgsProject.instance().addMapLayer(destino)
dp_destino = destino.dataProvider()
fields_destino = [QgsField(field, QVariant.Int) for field in new_fields]
dp_destino.addAttributes([fields_origem[0]]+fields_destino)
destino.updateFields()
# Pivotando
dados = {key[0]:dict() for key in origem.getFeatures()}
for feature in origem.getFeatures():
for field in new_fields:
if feature[1] == field:
dados[feature[0]][field] = feature[2]
for municipio in dados.keys():
dado = dados[municipio]
feature = QgsFeature()
feature.setAttributes([municipio]+[dado.get(campo.name(), None) for campo in fields_destino])
dp_destino.addFeatures([feature])
destino.updateExtents()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment