Seleccionar rasgos adyacentes en un vectorial tipo polígono mediante PyQGIS

En el post anterior se consideró la forma de dividir un polígono por otro lo cual, generalmente, se hace con el fin de averiguar que proporción de estos caen dentro del polígono mediante el cual hacemos el “corte”. Se obtuvo una memory layer la cual grabamos como shapefile con otro nombre (split_polygons); tal como se observa en la imagen siguiente:

dividido1

Como los features sub divididos son todos adyacentes, el algoritmo lo que procura es colectar los features del primer par adyacente y, si sigue la adyacencia, sólo el segundo de ellos. El código propuesto es el siguiente:

layer = iface.activeLayer()

feats = [ feat for feat in layer.getFeatures() ]

n = len(feats)

new_feats = []

k = 1

for i in range(n-1):
    
    if feats[i].geometry().intersects(feats[i+1].geometry()):
        
        if k == 1:
            new_feats.append(feats[i])
            new_feats.append(feats[i+1])
            k += 1
        else:
            new_feats.append(feats[i+1])
        
    else:
        k = 1

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

mem_layer.startEditing()

n = len(new_feats)

for i in range(n): 
    #set attributes values
    new_feats[i].setAttributes([i])
    mem_layer.addFeature(new_feats[i], True)

#stop editing and save changes
mem_layer.commitChanges()

Cuando se ejecuta en la Python Console se obtiene la memory layer que selecciona solo los rasgos esperados; tal como se presenta en la imagen a continuación:

divididos2

Como los rasgos seleccionados ya tienen geometría esto facilita la creación de la memory layer porque sólo hay que añadirle los valores del campo ID (establecer los atributos).

Esta entrada fue publicada en PyQGIS, QGIS, 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