Más

¿Ejecuta el script PyQGIS directamente (sin usar la interfaz)?

¿Ejecuta el script PyQGIS directamente (sin usar la interfaz)?


Escribí el siguiente script, que se ejecuta bien desde la consola de Python de QGIS (carga dos shapefiles, los cruza y luego encuentra las áreas de las nuevas regiones):

importar qgis.utils importar qgis.core de qgis.analysis importar * de PyQt4.QtCore importar QVariant importar os print (os.getcwd ()) layer1 = iface.addVectorLayer ("/ Users / casta2k / ShapefilePractice / precincts / USA_precincts.shp" , "precincts", "ogr") layer2 = iface.addVectorLayer ("/ Users / casta2k / ShapefilePractice / data_EPSG_4326 / Bnd_2015_q1_region.shp", "zipcodes", "ogr") overlayAnalyzer = QgsOverlayAnalyzer (capa en capa1) , "/Users/casta2k/ShapefilePractice/intersect/intersectOutput.shp") layer3 = iface.addVectorLayer ("/ Users / casta2k / ShapefilePractice / intersect / intersectOutput.shp", "intersect", "ogr") layer = iface.activeLayer () proveedor = layer.dataProvider () areas = [feat.geometry (). area () para dote en layer.getFeatures ()] campo = QgsField ("area", QVariant.Double) provider.addAttributes ([campo]) layer.updateFields () idx = layer.fieldNameIndex ('area') para el área en áreas: new_values ​​= {idx: float (area)} provider.changeAttributeValues ​​({areas.index (area): new_values})

Me gustaría poder ejecutar el código directamente desde un script de Python, sin tener que abrir la GUI. Intenté buscar en Internet, pero no encontré nada útil. ¿Tengo que empezar corriendo?QgsApplication.initQgis ()? Pensé que tenía que hacerlo, pero tengo una falla de segmentación. Además, intenté cambiariface.addVectorLayer ()paraQgsVectorLayer (), que parece funcionar bien en la consola de Python, pero parece que los archivos no se cargan cuando ejecuto el script de Python directamente.

Intenté incluir lo que sugirió @Paulo, pero todavía recibo errores. El código ahora comienza de la siguiente manera:

import sys import os sys.path.append ("/ Applications / QGIS.app / Contents / Resources / python") desde qgis.core import * import qgis.utils from qgis.analysis import * # ruta de suministro a donde está su qgis instalado QgsApplication.setPrefixPath ("/ Applications / QGIS.app / Contents / MacOS", True) # cargar proveedores QgsApplication.initQgis ()

Pero en la última línea (QgsApplication.initQgis ()) Recibo el siguiente error:

QCoreApplication :: applicationDirPath: primero cree una instancia del objeto QApplication QCoreApplication :: applicationDirPath: primero cree una instancia del objeto QApplication Fallo de segmentación: 11

Debe proporcionar algunas importaciones y rutas que sean automáticas cuando usa Python desde dentro de QGIS, pero no desde afuera. Además de las bibliotecas que importa, comience con:

from qgis.core import * # ruta de suministro a donde está su qgis instalado QgsApplication.setPrefixPath ("/ ruta / a / qgis / installation", True) # cargar proveedores QgsApplication.initQgis ()

consulte: http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/intro.html, especialmente "Uso de PyQGIS en una aplicación personalizada" y "Ejecución de aplicaciones personalizadas".


Debe crear un objeto de aplicación antes de hacer referencia a QgsApplication:

desde qgis.core importar QgsApplication desde PyQt4.QtGui importar QApplication app = QApplication ([])

Ver el vídeo: QGIS Python PyQGIS - Loading and symbolizing raster layers