Creando buffers cuadrados alrededor de puntos con PyQGIS

Crear buffers cuadrados alrededor de puntos usando PyQGIS no es muy difícil. En la clase QgsGeometry existe el método (‘buffer’) y para ello sólo hay que seleccionar previamente todos los rasgos. Sin embargo, el resultado inicial es el ya conocido buffer circular.

Para convertir el buffer circular en uno cuadrado sólo basta aplicar a la geometría el método ‘boundingBox’ y expresar el resultado en el formato WKT (Well Known Text). Estas geometrías pueden incorporarse fácilmente en una ‘memory layer’ para visualizar finalmente el resultado. El código completo (para crear buffers de 1000 m alrededor del punto) se encuentra a continuación. Incluye, además, la posibilidad de añadir a la tabla atributiva de la ‘memory layer’ campos con las coordenadas (x,y) y el id de cada punto.

layer = iface.activeLayer()

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

epsg = layer.crs().postgisSrid()

uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer&field=x:real&field=y:real&field=point_id:integer""&index=yes"

mem_layer = QgsVectorLayer(uri,
                           'square_buffer',
                           'memory')

prov = mem_layer.dataProvider()

for i, feat in enumerate(feats):
    point = feat.geometry().asPoint()
    new_feat = QgsFeature()
    new_feat.setAttributes([i, point[0], point[1], feat.id()])
    tmp_feat = feat.geometry().buffer(1000, -1).boundingBox().asWktPolygon()
    new_feat.setGeometry(QgsGeometry.fromWkt(tmp_feat))
    prov.addFeatures([new_feat])

QgsMapLayerRegistry.instance().addMapLayer(mem_layer)

La ejecución del código anterior en la Python Console de QGIS permite, para el vectorial de la imagen siguiente, comprobar que este produce los resultados esperados.

square_buffer1

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

Una respuesta a Creando buffers cuadrados alrededor de puntos con PyQGIS

  1. Pingback: Creando buffers rectangulares alrededor de puntos con 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