Capa de centroides a partir de una grid mediante PyQGIS

En los dos artículos precedentes he estado exponiendo las herramientas para crear un script que produzca una capa de centroides a partir de una grid mediante PyQGIS. La grid de 5 filas por 10 columnas está proyectada en WGS 84 UTM12N y se puede ver en la imagen inferior. Hay que asegurarse de que es capa activa antes de correr el script.

pyqgis

El script usa un iterador sobre los features de la grid para obtener las coordenadas de cada uno de los centroides y los almacena en una lista con formato WKB para MultiPoint. Posteriormente, se extrae el CRS de la grid y se le incorpora a la URI de la capa destino. Se crea una memory layer para la capa de centroides, se adiciona al registro y se coloca en modo de edición. Se definen sus features, su geometría (MultiPoint) y sus atributos antes de ser añadidos estos últimos en un bucle. Finalmente, se commuta la edición. El script es el siguiente:

grid =iface.activeLayer()

#Define iterator
iter = grid.getFeatures()

points = []

#Iterate over features
for features in iter:
    geom = features.geometry()
    centroids = geom.centroid().asPoint()
    points.append(centroids)

#Extract CRS from grid
CRS = grid.crs().postgisSrid()

URI = "Point?crs=epsg:"+str(CRS)+"&field=id:integer""&index=yes"

#Create multipoint layer
mem_layer = QgsVectorLayer(URI,
                        "centroids",
                        "memory")

#add Map Layer to Registry
QgsMapLayerRegistry.instance().addMapLayer(mem_layer)

#Prepare mem_layer for editing
mem_layer.startEditing()

#Set feature
feat = QgsFeature()

#Set geometry
feat.setGeometry(QgsGeometry.fromMultiPoint(points))

#Calculate number points
n = len(points)
 
#set attributes values 
for i in range(n):
    feat.setAttributes([i])
    mem_layer.addFeature(feat, True)

#stop editing and save changes
mem_layer.commitChanges()

El resultado satisfactorio de su ejecución en la Python Console se observa en la imagen siguiente:

pyqgis2

Esta entrada fue publicada en Código Python, PyQGIS, SIG, Software Libre. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s