¿Accediendo al 'procesamiento' con Python?

14

Quiero acceder a la las líneas de detonación funcionan en Python fuera de QGIS desde una secuencia de comandos independiente.

¿Qué módulo tengo que cargar para usarlo?

¿Cómo puedo acceder a processing ?

from qgis.core import *

layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')

processing.runalg('qgis:explodelines', layerInput, 'temp.shp')
    
pregunta ustroetz 08.01.2015 - 11:55

2 respuestas

25

ACTUALIZACIÓN 24.04.2018: Vea cómo hacer esto en QGIS v3.x aquí .

Para QGIS v2.x

Finalmente, encontré la forma correcta de ejecutar algoritmos de procesamiento a través de scripts PyQGIS independientes.

Usando el complemento de procesamiento versión 2.2.0-2, puede probar el siguiente script:

# Prepare the environment
import sys
from qgis.core import *
from PyQt4.QtGui import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Prepare processing framework 
sys.path.append('/home/user/.qgis2/python/plugins') # Folder where Processing is located
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *

# Run the algorithm
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
general.runalg('qgis:explodelines', layerInput, 'temp.shp')

# Exit applications
QgsApplication.exitQgis()
QApplication.exit()

Las versiones de Procesamiento más nuevas podrían ubicarse en /usr/share/qgis/python/plugins , por lo que es posible que necesites usar sys.path.append('/usr/share/qgis/python/plugins') en consecuencia.

Encontré el ejemplo de trabajo en Error: No se encontró el algoritmo , que a su vez se basa en una discusión de la lista de correo Qgis-dev .

    
respondido por el Germán Carrillo 15.01.2015 - 01:35
3

Hasta que llegue a trabajar la forma genérica de hacerlo, te diré una solución.

Utilizo la versión 2.2.0-2 del plugin de Procesamiento (le sugiero que use esta versión), que se instala en /home/germap/.qgis2/python/plugins/ en mi computadora. Debe conocer la ubicación de esta carpeta, ya que importa el módulo de procesamiento desde allí.

Ya que conoce el proveedor ( qgis ) y el algoritmo ( explodelines ), puede mirar a /home/germap/.qgis2/python/plugins/processing/algs/qgis/ para tomar el nombre del script de líneas de explosión: Explode.py Esta información le permite importar el algoritmo directamente a tu script independiente de Python.

Entonces, abra una consola de Python y copie la siguiente secuencia de comandos (yo uso GNU / Linux, por lo que las variables de entorno están configuradas de forma predeterminada, lo que me permite importar bibliotecas qgis y PyQt4 de forma sencilla):

# Prepare the environment
import sys
from PyQt4.QtGui import *
from qgis.core import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Tell Python where you will get processing from
sys.path.append('/home/germap/.qgis2/python/plugins')

# Reference the algorithm you want to run
from processing.algs.qgis.Explode import *
alg = Explode() 

# Set input and output
inLayer = QgsVectorLayer('/home/user/data/in.shp', 'input', 'ogr')
outLayer = '/home/user/data/out.shp'
alg.setParameterValue('INPUT', inLayer)
alg.setOutputValue('OUTPUT', outLayer)

# Run the algorithm
from processing.core.SilentProgress import SilentProgress
progress = SilentProgress()
alg.processAlgorithm(progress)

Si no recibe mensajes de error, eso es todo. La capa de salida se ha guardado en la ruta de salida que especificó ( /home/user/data/out.shp )

Nota: con respecto a una forma genérica (es decir, algoritmos de llamada por nombre), he encontrado algunos problemas que debo resolver antes de publicarlos. Tan pronto como lo haga funcionar, lo publicaré.

    
respondido por el Germán Carrillo 12.01.2015 - 19:45

Lea otras preguntas en las etiquetas