Hola, Hace un tiempo que pregunté esto por el grupo de Telegram y me indicaron algunas maneras para Windows y no terminé de ver la forma para Linux y quería aprovechar la ocasión para crear y dejar este hilo en la lista de correos.
La idea es saber qué paquetes de Python o cómo he de configurar el sistema para crear un script de PyQGIS y sin entrar en la GUI de QGIS corran aprovechando los algoritmos de procesamiento que tiene QGIS. Por lo visto no es sencillo pero quizá alguien ya lo intentó y resolvió con anterioridad. He intentado seguir las indicaciones de esta entrada de Stackoverflow pero no no me funciona: https://gis.stackexchange.com/questions/279874/using-qgis3-processing-algorithms-from-standalone-pyqgis-scripts-outside-of-gui/279937#279937 Pego de lo comenté en Telegram aquí: Miguel Sevilla-Callejo, [09.10.18 17:40] entiendo que he de importar los paquetes de qgis3: from qgis.core import ( QgsApplication, QgsProcessingFeedback, QgsVectorLayer ) Miguel Sevilla-Callejo, [09.10.18 17:40] pero no se como cargar el processing Miguel Sevilla-Callejo, [09.10.18 17:41] el post de stackoverflow en cuestion sigue con este código: # See https://gis.stackexchange.com/a/155852/4972 for details about the prefix QgsApplication.setPrefixPath('/usr', True) qgs = QgsApplication([], False) qgs.initQgis() # Append the path where processing plugin can be found#sys.path.append('/docs/dev/qgis/build/output/python/plugins') import processingfrom processing.core.Processing import Processing Processing.initialize() Miguel Sevilla-Callejo, [09.10.18 17:42] pero la cosa es que no termino de entender el sys.path.append que indica pues ahí no hay nada en mi instalación 😞 Miguel Sevilla-Callejo, [09.10.18 17:42] alguna idea? Continúa aquí: https://t.me/qgis_es/13895 Miguel Sevilla-Callejo, [09.10.18 18:15] parece que ya se me carga aquí la cabecera: import sysfrom qgis.core import ( QgsApplication, QgsProcessingFeedback, QgsVectorLayer ) QgsApplication.setPrefixPath('/usr', True) qgs = QgsApplication([], False) qgs.initQgis() sys.path.append('/usr/share/qgis/python/plugins/') import processingfrom processing.core.Processing import Processing Processing.initialize() Miguel Sevilla-Callejo, [09.10.18 18:19] la cosa es que ahora no me carga el proceso: processing.run( "native:buffer", { 'INPUT':dir_base + archivo_entrada, # archivo de entrada 'DISTANCE':0.002, # distancia del buffer 0.002 grados geográficos 'SEGMENTS':99, # aproximación en los giros 'END_CAP_STYLE':0, 'JOIN_STYLE':0, 'MITER_LIMIT':2, 'DISSOLVE':False, # no disolver 'OUTPUT':dir_base + archivo_salida # archivo de salida } ) Miguel Sevilla-Callejo, [09.10.18 18:20] mensaje: QgsProcessingException: Error: Algorithm native:buffer not found Fran Raga me dijo que me faltaba import from qgis.analysis import QgsNativeAlgorithms Y Luiggi que: "cuando carga qgis desde script processing esta vacio, en el sentido que no hay provedores registrados hay que cargar el provedore de los native algorithms por el script en entorno linux, y esto no es nada de qgis es puro entorno unix... neceista que haya dos variable de entorno bien puestas LD_LIBRARY_PATH donde encontrar los .so de qgis y PYTHONPATH donde encontrar los modulos de python (sumento que PYTHONHOME esta ya bien por defecto) en el script clasico de qgis.bat en winzozz seria la varable PATH la equivalente de LD_LIBRARY_PATH " Más delentante también me dijo que: "no... no es suficiente hacer import de QgsNativeAlgorithms hay que registrar el provider" ... En fin... la verdad es que me he perdido un poco en las últimas explicaciones y leo que he de seguir los test en python (dónde?)... Luiggi me facilitó esto: https://github.com/luipir/QGIS/blob/bf6162f376fad6dd44fb2f540c536b7f2371a2a3/tests/src/analysis/testqgsprocessing.cpp pero, sinceremente me pierdo :-( Agradecería si alguien se toma la molestia de indicarme una fuente clara o indicarme cómo podría hacerlo. Si no siempre me queda correr la GUI indicándole que tras abrir ejecute el código del scritp con: qgis --code scriptname.py y quizá podría añadir al script (para cerrar la GUI) esto: from qgis.utils import iface iface.actionExit().trigger() Aunque esto no lo he hecho funcionar (se me queda la GUI abierta). Un saludo -- *Miguel Sevilla-Callejo* Doctor en Geografía
_______________________________________________ QGIS-es mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/qgis-es
