martes, 14 de febrero de 2017

Utilizando saga:polygonlineintersection en PyQGIS

Una de las situaciones que nos obliga a no explorar con más detalle las opciones que ofrece 'Processing' en QGIS es la dificultad que supone el acceso a su documentación. Aunque existe, ésta es muy escueta y se limita a unos pocos ejemplos. Por otra parte, la documentación que ofrece la ayuda de la Python Consola a través de la ejecución de los comandos 'processing.alglist' y 'processing.alghelp' tiene el inconveniente de que no pueden ser asignadas a una variable; a menos que se redirija el flujo de salida estándar. Esto último facilitaría la evaluación de los posibles métodos de 'Processing' mediante el módulo de expresiones regulares.



Para facilitar la evaluación de los métodos de Processing, se creó un plugin que permite filtrar aquellos de nuestro interés (a través del uso combinado de 'processing.alglist' y el módulo de expresiones regulares de python) y posteriormente, una vez seleccionado, emplear 'processing.alghelp' para averiguar cuáles son los parámetros de uso que exige el comando.

El plugin desarrollado, sin texto para filtrar (ver imagen siguiente), permite averiguar que 'Processing' tiene a disposición 698 geoalgoritmos; una cantidad nada despreciable de ignorar.


Si nos interesa averiguar que métodos de geoprocesamiento tiene 'Processing' que incluyan la palabra 'intersection', se tienen las 5 opciones que presenta la imagen siguiente:


De acuerdo al título del post se va a esgoger la opción saga:polygonlineintersection (próduce una capa tipo polígono) y en el plugin averiguamos cuáles son los parámetros a usar.


Se tienen que crear referencias, respectivamente, a la capa polígono, la capa línea y a la salida (tipo polígono). Para facilitar lo primero se empleará la clase QgsMapLayerRegistry; ya que esta tiene un método que hace referencia directa al nombre de las capas. La salida corresponde simplemente al paso que albergará la capa (por defecto será un shapefile). La situación que se va a considerar será la siguiente:


El código PyQGIS se encuentra a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import processing
 
registry = QgsMapLayerRegistry.instance()

polygon4 = registry.mapLayersByName('polygon4')
line_new = registry.mapLayersByName('line_new')
 
path = '/home/zeito/pyqgis_data/output_poly_lineintersection.shp' 

processing.runalg('saga:polygonlineintersection', polygon4[0], line_new[0], path)

Después de ejecutado en la Python Console de QGIS, la capa producida y posteriormente cargada manualmente al Map Canvas luce de la manera siguiente:


La línea ha dividido cada rasgo en dos adicionales. El primero de ellos se resalta en amarillo.


No hay comentarios: