J'ai essayé, avec ce post , d'exécuter un script dans OSGeo4w Shell , en dehors de QGIS. Mais j'obtiens l'erreur suivante:
ImportError: aucun module nommé qgis.core
J'ai également lu les articles suivants et essayé d'importer divers modules mais en vain:
- Comment exécuter des algorithmes sextante en dehors de la console python QGIS?
- Comment exécuter un script python simple pour QGIS de l'extérieur (par exemple Sublime Text)?
- Vous écrivez des scripts Python autonomes à l'aide de PyQGIS?
Voici un script simple qui crée une grille et y clipse un fichier de formes polygonales.
Remarque: ce script a été testé et fonctionne correctement lors de son exécution dans QGIS.
##Test=name
import os
import glob
import sys
sys.path.append("C:\Program Files\QGIS Brighton\lib;%OSGEO4W_ROOT:\=/%/apps/qgis;%OSGEO4W_ROOT%\apps\qgis\bin;%OSGEO4W_ROOT%\apps\grass\grass-6.4.3\lib;%PATH%")
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
QgsApplication.setPrefixPath("C:\Program Files\QGIS Brighton\apps\qgis", True)
QgsApplication.initQgis()
from os.path import expanduser
home = expanduser("~")
# Folder path of the Results for shapefiles
path_dir = home + "\Desktop\Test\\"
path_res = path_dir + "Results\\"
def run():
# Set directory, search for all polygon .shp files and run the Create Grid and Clip algorithms then output results into Results folder
os.chdir(path_dir + "Shapefiles\\")
for fname in glob.glob("*.shp"):
outputs_1=processing.runalg("qgis:creategrid", 1000, 1000, 24108, 18351.157175, 258293.802316, 665638.226408, 1, 'EPSG:7405', None)
outputs_2=processing.runalg("qgis:clip", outputs_1['SAVENAME'], fname, path_res + "/"+ fname)
run()
QgsApplication.exitQgis()
# Remove the above line when running in QGIS
Suite à la réponse et au script posté par @gcarrillo, je peux enfin importer les qgis.core.
modules avec succès. Le script fourni par @gcarrillo s'exécute mais je reçois une erreur de trace:
Traceback (most recent call last):
File "Test.py", line 55, in <module>
run()
File "Test.py", line 53, in run
algClip.processAlgorithm(progress)
File "C:\Users\username\.qgis2\python\plugins\processing\algs\qgis\ftools\Clip.py", line 59, in processAlgorithm
layerA.pendingFields(),
AttributeError: 'NoneType' object has no attribute 'pendingFields'
pyqgis
qgis-processing
Joseph
la source
la source
Réponses:
Enfin trouvé la bonne façon d'exécuter des algorithmes de traitement dans les scripts autonomes PyQGIS.
Cette réponse est basée sur les réponses au problème avec l'importation qgis.core lors de l'écriture d'un script PyQGIS autonome et à l' erreur: algorithme introuvable , qui est à son tour basé sur une discussion de la liste de diffusion Qgis-dev .
Je vous suggère de suivre le flux de travail donné dans Problème avec l'importation qgis.core lors de l'écriture d'un script PyQGIS autonome pour activer vos bibliothèques QGIS dans votre shell OSGeo4W. Une fois que vos bibliothèques QGIS fonctionnent correctement, nous pouvons passer à la 2e partie de votre question: exécuter des algorithmes de traitement dans un script PyQGIS autonome.
J'ai un peu modifié votre script d'origine et l'ai testé sur Windows 7 et GNU / Linux. J'utilise la version de traitement 2.2.0-2 et je vous suggère d'utiliser cette version, qui est la version actuelle au moment d'écrire la réponse.
Notez que j'ai retiré la création de la grille de la boucle for, car vous n'avez pas vraiment besoin d'une nouvelle grille pour effectuer chaque clip.
Cela devrait faire l'affaire!
la source
Processing
dossier sur le bureau, similaire à celui contenu dans le/qgis.2
dossier. Cela devrait-il arriver?Cette réponse est basée sur les réponses à Problème avec l'importation qgis.core lors de l'écriture d'un script PyQGIS autonome et sur Comment puis-je accéder au `traitement` avec Python? .
Je vous suggère de suivre le flux de travail donné dans Problème avec l'importation qgis.core lors de l'écriture d'un script PyQGIS autonome pour activer vos bibliothèques QGIS dans votre shell OSGeo4W. Une fois que vos bibliothèques QGIS fonctionnent correctement, nous pouvons passer à la 2e partie de votre question: exécuter des algorithmes de traitement dans un script PyQGIS autonome.
Comme dans Comment puis-je accéder au `traitement` avec Python? , Je vais vous donner une solution de contournement jusqu'à ce que je puisse exécuter des algorithmes par nom (par exemple,
processing.runalg('provider:algorithm_name')
). J'utilise la version de traitement 2.2.0-2 et je vous suggère d'utiliser cette version.Nous pouvons utiliser la console QGIS Python pour déterminer où se trouve un script d'algorithme dans les dossiers de plug-in de traitement. Par exemple, pour savoir d'où importer
qgis:creategrid
, écrivez dans la console QGIS Python:Vous devez obtenir:
ce qui nous suffit de remarquer à la fois le chemin du module (
processing.algs.qgis.mmqgisx.MMQGISXAlgorithms
) et la classe d'algorithme (mmqgisx_grid_algorithm
). Vous utiliserez ces informations dans le script ci-dessous.J'ai un peu modifié votre script et l'ai testé sur Windows 7. Vous devrez peut-être ajuster les chemins afin d'exécuter le script dans votre propre environnement.
Cela devrait faire l'affaire!
Comme vous pouvez le voir, j'ai créé un dossier Test / Grilles afin que vous stockiez un seul Shapefile de grille au lieu de créer un fichier temporel dans chaque boucle for, ce qui ne semble pas être nécessaire.
la source
Test/Grids/
avant d'exécuter le script./Grids/
dossier et le fichier grid.shp est créé. Cela fonctionne parfaitement! Quelque chose d'autre est le problème.path_dir + "Grids\grid.shp"
, ce qui seraitC:\Users\your_username\Desktop\Test\Grids\grid.shp
J'ai dû apporter des modifications mineures au script fourni par @gcarrillo pour inclure le chemin OSGEO4W64 (j'ai dû réinstaller QGIS via le programme d'installation OSGEO4W64 car j'ai utilisé le programme d'installation autonome initialement) et inclure des doubles barres obliques. Voici le script final et merci à tous pour leur aide:
la source