Región buffer con PyQGIS

En PyQGIS existen varias formas de determinar la región buffer de un vectorial (la más directa es a través de la clase QgsGeometryAnalyzer). No obstante, si se quiere verificar la lógica e intuición que se ha seguido hasta ahora es preferible construirla desde cero. En la clase QgsGeometry existe un método denominado ‘buffer’ que admite dos valores: un float para el ancho de la región buffer y un entero que es un índice a los rasgos seleccionados (-1 es el valor por defecto que señala que todos los rasgos tienen la misma región buffer).

Si contamos, por ejemplo, con un vectorial tipo línea, hay que seleccionar sus rasgos (features) para posteriormente acceder a su geometría y de allí al método buffer. Una vez hecho esto entonces se crea una memory layer para el buffer, que es de tipo ‘Polygon’, y en modo de edición se establecen su feature, su geometría y se le copian sus atributes antes de commutar edición. La imagen del vectorial usado para probar el script de PyQGIS es la siguiente:

buffer

El script con el procedimiento se indica a continuación:

route =iface.activeLayer()

#select feature
route.select(0)

feat=route.selectedFeatures()[0]

#get geometry
geom = feat.geometry()

#determine buffer 500 m
buffer = geom.buffer(500,-1)

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

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

#Create polygon layer for buffer
mem_layer = QgsVectorLayer(URI,
                        "buffer",
                        "memory")

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

#Prepare mem_layer for editing
mem_layer.startEditing()

#Set feature for buffer
feat2 = QgsFeature()

#Set geometry for buffer
feat2.setGeometry(buffer)

#set attributes values for buffer
feat2.setAttributes([1])
 
mem_layer.addFeature(feat2, True)

#stop editing and save changes
mem_layer.commitChanges()

#deselect feature
route.deselect(0)

#zoom to Active Layer (now is buffer)
iface.zoomToActiveLayer()

El resultado fue el siguiente:

buffer2

y señala que el buffer se creó satisfactoriamente mediante el script.

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

2 respuestas a Región buffer con PyQGIS

  1. Pingback: Región buffer con PyQGIS | NOSOLOSIG | ...

  2. Hola, buen día, disculpe en PYQGIS como le hago para selecciones varios puntos para un buffer, es decir, no solamente crear un buffer para un solo punto si no para varios?

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