Created
August 22, 2020 22:00
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| 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