Cuando hay que realizar muchas operaciones repetitivas en QGIS, Python puede proporcionarnos una solución sencilla. Antes de afrontar el trabajo deberíamos plantearnos si es posible automatizarlo de alguna manera.
En esta entrada vamos a hacer unas operaciones básicas con Python sobre una capa vectorial:
- Corrección automática de los nombres para incluir caracteres especiales.
- Adición de atributos a geometrías.
- Cálculo automático de áreas de geometrías teniendo en cuenta el Sistema de Coordenadas.
Para ello partimos de los recintos autonómicos descargados del Centro de Descargas del Instituto Geográfico Nacional (Información geográfica de referencia > Líneas límite municipales). Para cargar la capa activa en Python escribiremos la siguiente línea:
al = iface.activeLayer()
De esta forma almacenamos la capa activa en la variable al (active layer). Ahora accederemos a las entidades de la capa almacenándolas en la variable features.
features = al.getFeatures()
for field in al.fields(): print(field.name())
for feat in features: attrs = feat.attributes() print(attrs)
for feat in features: for field in al.fields(): fn = field.name() print(fn,": ",feat[fn])
dp = al.dataProvider() dp.addAttributes([QgsField("AREA", QVariant.Double)]) al.updateFields()
d = QgsDistanceArea() d.setEllipsoid('WGS84')
al.startEditing() for feat in features: name = feat.attribute('NAMEUNIT') geom = feat.geometry() name = name.encode("windows-1252").decode("utf-8") feat['NAMEUNIT'] = name feat['AREA'] = d.convertAreaMeasurement(d.measureArea(geom), QgsUnitTypes.AreaSquareKilometers) al.updateFeature(feat) print(name) print("Area (km2):", d.convertAreaMeasurement(d.measureArea(geom), QgsUnitTypes.AreaSquareKilometers)) al.commitChanges()
De esta manera ya hemos añadido todos esos datos a las entidades y además corregido los nombres. Imagina que puedes hacer cálculos más complejos y sobre miles de entidades en una cuestión de minutos.
Deja tu comentario