Suite

Exécuter le script PyQGIS directement (sans utiliser l'interface) ?


J'ai écrit le script suivant, qui fonctionne bien à partir de la console python QGIS (il charge deux fichiers de formes, les coupe, puis trouve les zones des nouvelles régions):

importer qgis.utils importer qgis.core de qgis.analysis importer * de PyQt4.QtCore importer QVariant importer os print(os.getcwd()) layer1 = iface.addVectorLayer("/Users/casta2k/ShapefilePractice/precincts/USA_precincts.shp" , "enceintes", "ogr") layer2 = iface.addVectorLayer("/Users/casta2k/ShapefilePractice/data_EPSG_4326/Bnd_2015_q1_region.shp", "zipcodes", "ogr") overlayAnalyzer = QgsOverlayAnalyzer() overlay1,layerAnalyzer. , "/Users/casta2k/ShapefilePractice/intersect/intersectOutput.shp") layer3 = iface.addVectorLayer("/Users/casta2k/ShapefilePractice/intersect/intersectOutput.shp", "intersect", "ogr") layer = iface.activeLayer () provider = layer.dataProvider() areas = [ feat.geometry().area() pour feat in layer.getFeatures() ] field = QgsField("area", QVariant.Double) provider.addAttributes([field]) layer.updateFields() idx = layer.fieldNameIndex('area') pour la zone dans les zones : new_values ​​= {idx : float(area)} provider.changeAttributeValues({areas.index(area):new_values})

J'aimerais pouvoir exécuter le code directement à partir d'un script python, sans avoir à ouvrir l'interface graphique. J'ai essayé de chercher sur Internet, mais je n'ai rien trouvé d'utile. Dois-je commencer par courirQgsApplication.initQgis()? Je pensais que je devais le faire, mais j'obtiens un défaut de segmentation. Aussi, j'ai essayé de changeriface.addVectorLayer()àQgsVectorLayer(), qui semble fonctionner correctement dans la console Python, mais il semble que les fichiers ne soient pas chargés lorsque j'exécute directement le script python.

J'ai essayé d'inclure ce que @Paulo a suggéré, mais j'obtiens toujours des erreurs. Le code commence maintenant comme suit :

import sys import os sys.path.append("/Applications/QGIS.app/Contents/Resources/python") depuis qgis.core import * import qgis.utils depuis qgis.analysis import * # chemin d'accès à l'endroit où votre qgis est installé QgsApplication.setPrefixPath("/Applications/QGIS.app/Contents/MacOS", True) # charger les fournisseurs QgsApplication.initQgis()

Mais sur la dernière ligne (QgsApplication.initQgis()) J'obtiens l'erreur suivante :

QCoreApplication::applicationDirPath : Veuillez instancier d'abord l'objet QApplication QCoreApplication::applicationDirPath : Veuillez instancier d'abord l'objet QApplication Erreur de segmentation : 11

Vous devez fournir des importations et des chemins automatiques lorsque vous utilisez Python à partir de QGIS, mais pas à l'extérieur. En plus des bibliothèques que vous importez, commencez par :

from qgis.core import * # chemin d'accès à l'endroit où votre qgis est installé QgsApplication.setPrefixPath("/path/to/qgis/installation", True) # charger les fournisseurs QgsApplication.initQgis()

voir : http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/intro.html, en particulier "Utilisation de PyQGIS dans une application personnalisée" et "Exécution d'applications personnalisées".


Vous devez créer un objet app avant de référencer QgsApplication :

depuis qgis.core importez QgsApplication depuis PyQt4.QtGui importez l'application QApplication = QApplication([])


Voir la vidéo: QGIS Python PyQGIS - Create a Custom Processing Script for QGIS in the Processing Toolbox (Octobre 2021).