sábado, 10 de agosto de 2019

Utilizando "native:rotatefeatures" en PyQGIS 3 Processing

A medida que ha ido avanzando el desarrollo de QGIS 3 a través de sus diferentes versiones (ya vamos por la 8), es cada vez más sencillo programar con PyQGIS porque existen más algoritmos disponibles en las herramientas de la Processing Toolbox. Hoy vamos a considerar el algoritmo "native:rotatefeatures" que permite rotar rasgos de una capa vectorial, en sentido horario, un angulo determinado a partir de un punto de rotación; que si no se especifica se toma como el centroide por defecto.

Por otra parte, es también más sencillo averiguar el nombre identificativo del algoritmo. Sólo basta con pasar el cursor por encima del nombre de la herramienta en la Processing Toolbox donde aparecerá una tooltip con el id correspondiente ("native:rotatefeatures" en nuestro caso). Para conocer el número mínimo de parámetros a usar basta con ejecutar el algoritmo en la Processing Toolbox con una layer de ejemplo y tomar nota de estos en la pestaña de Logs. Este fue el resultado en mi caso:

Algorithm 'Rotate' starting
Input parameters:
{ 'ANCHOR' : None, 'ANGLE' : 26.081262365320853, 'INPUT' : '/home/zeito/pyqgis_data/polygon1.shp', 'OUTPUT' : 'TEMPORARY_OUTPUT' }

Execution completed in 0.13 seconds
Results:
{'OUTPUT': 'Rotated_b0d7c112_c5c3_4e16_87bc_34faf402fbd3'}

Con base en lo anterior, el código propuesto fue:

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import processing

registry = QgsProject.instance()

polygon1 = registry.mapLayersByName('polygon1')
angle = 26.081262365320853

parameters = { 'ANCHOR' : None, 
               'ANGLE' : angle, 
               'INPUT' : polygon1[0], 
               'OUTPUT' : 'TEMPORARY_OUTPUT' }

processing.runAndLoadResults("native:rotatefeatures", parameters)

Este permite rotar en sentido horario, alrededor del centroide, el vectorial de la imagen siguiente (color ocre) por un ángulo de 26.081262365320853. La capa resultante, después de la ejecución del script, se encuentra en la misma imagen como archivo temporal reflejada en azul.


No hay comentarios: