sábado, 25 de enero de 2020

Cómo producir buffers, alrededor de puntos, con diferente número de lados en PyQGIS 3

En un post anterior se consideró la producción de buffers, alrededor de puntos, con diferente número de lados en la antigua versión de QGIS. En éste toca modificar el script allí propuesto para que pueda funcionar con PyQGIS 3. Las modificaciones incluyen un sólo punto con proyección EPSG 32612 y una distancia buffer de 1000 metros. Los métodos de clase ahora empleados y que han cambiado con respecto a la versión anterior corresponden a QgsGeometry, QgsPointXY y QgsQgsProject. El script propuesto se encuentra a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import numpy as np
 
bufferLength = 1000
polygonSides = 5
 
pt = QgsPointXY(364067.6920850627, 4426289.212155256)
 
points = [ pt ]
 
epsg = 32612
 
uri = "Polygon?crs=epsg:" + str(epsg) + "&field=id:integer""&index=yes"
 
mem_layer = QgsVectorLayer(uri,
                           'buffer',
                           'memory')
 
prov = mem_layer.dataProvider()
 
for i, point in enumerate(points):
    outFeat = QgsFeature()
 
    outFeat.setGeometry(QgsGeometry.fromPolygonXY([[ QgsPointXY(point[0] + np.sin(angle)*bufferLength, point[1] + np.cos(angle)*bufferLength)
                        for angle in np.linspace(0, 2*np.pi, polygonSides, endpoint = False) ]]))

    outFeat.setAttributes([i])
    prov.addFeatures([outFeat])
 
QgsProject.instance().addMapLayer(mem_layer)

Después de ejecutado en la Python Console de QGIS, el resultado se observa en la imagen siguiente:


No hay comentarios: