Cómo pasar de Multi Part a Single Part utilizando PyQGIS

Las geometrías Multi Part se reconocen porque tienen varios componentes asociados o agrupados en un solo rasgo (feature). Si embargo, en algunos casos puede ser necesaria hacer una asignación individual de features, es decir, establecer para cada componente un registro en la tabla atributiva a fin de realizar caracterizaciones más detalladas (por ejemplo, asignación individual de áreas, perímetro o población). En la imagen siguiente se tiene un shapefile tipo polígono que corresponde a una geometría Multi Part. Observen que a pesar de tener 2 componentes tiene un sólo registro en la tabla atríbutiva.

multipart1

El código siguiente permite analizar si la geometría es Multi Part y recomponerla en tantas partes simples contenga a través de una memory layer.

layer = iface.mapCanvas().currentLayer()

features = layer.getFeatures()

for feature in features:
    geom = feature.geometry()
    
    # check if feature geometry is multipart
    if geom.isMultipart():
        new_features = []
        temp_feature = QgsFeature(feature)
        
        # set the geometry of each part
        for part in geom.asGeometryCollection ():
            temp_feature.setGeometry(part)
            new_features.append(QgsFeature(temp_feature)) 

geom = [ feature.geometry().asPolygon() for feature in new_features ]

#creating a memory layer for multi polygon
crs = layer.crs()
epsg = crs.postgisSrid()
 
uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"
 
mem_layer = QgsVectorLayer(uri,
                           "polygon",
                           "memory")
 
QgsMapLayerRegistry.instance().addMapLayer(mem_layer)
 
mem_layer.startEditing()
 
n = len(new_features)

for i in range(n):
    #set geometry
    new_features[i].setGeometry(QgsGeometry.fromPolygon(geom[i]))
    #set attributes values
    new_features[i].setAttributes([i])
    mem_layer.addFeature(new_features[i], True)
 
#stop editing and save changes
mem_layer.commitChanges()

Cuando se ejecuta en la Python Console de QGIS se obtiene lo siguiente:

multipart2

La tabla atributiva posee ahora 2 registros, cada parte se colorea de amarillo cuando se seleccionan de manera individual y el “Check Geometry Validity” se ejecuta sin errores. Esto señala que la recomposición en Single Parts ha ocurrido sin contratiempos.

Esta entrada fue publicada en PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Una respuesta a Cómo pasar de Multi Part a Single Part utilizando PyQGIS

  1. Pingback: Cómo pasar de Single Part a Multi Part utilizando PyQGIS | El Blog de José Guerrero

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