Écrire des scripts pouvant faire appel à la fois à Arcpy et à PyQGIS?

11

J'ai passé pas mal de temps à chercher une réponse claire à ce sujet et je n'ai toujours pas pu atteindre mon objectif d'accéder à PyQGIS dans un script autonome.

Des parties des réponses ont été fournies à travers de nombreuses questions différentes telles que:

Applications autonomes utilisant QGIS et des variables d'environnement

pyQgis dans un script autonome, erreur de chargement du vecteur

Vous écrivez des scripts Python autonomes à l'aide de PyQGIS?

La réponse la plus approfondie que j'ai trouvée a été fournie par @gene ici .

Ce qui m'intéresse particulièrement, c'est de pouvoir écrire des scripts pouvant faire appel à la fois à Arcpy et à PyQGIS. J'ai défini les variables système PATH et PYTHONPATH conformément à la documentation du livre de recettes PyQGIS comme suit:

 C:\OSGeo4W\apps\qgis\bin,%PATH%;C:\Python27\ArcGIS10.2\Lib\site-packages\PyQt4;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\

et

C:\OSGeo4W\apps\qgis\python; C:\OSGeo4W\apps\Python27\Lib\site-packages

Respectivement.

Je commence par ce script:

from qgis.core import *

QgsApplication.setPrefixPath("C:\OSGeo4W\bin\qgis.bat", True)
QgsApplication.initQgis()
# or your solution
# read a shapefile 
layer = QgsVectorLayer('H:\DATA\Airfields_AB.shp', 'Airfields', 'ogr')
layer.isValid()
True
# loop through layer 
for elem in layer.getFeatures():
    geom= elem.geometry()
    attr =elem.attributes()
    (processing)

Je cherche à éviter les scripts batch qui définissent les paramètres appropriés, mais plutôt les appeler à partir du script Python. Le scénario optimal pour moi serait d'utiliser l'IDLE dans le dossier ArcGIS 10.2 pour exécuter le code précédent. J'utilise une machine Windows 7 avec ArcGIS 10.2 et QGIS 2.01.

Actuellement, les résultats de ce code sont:

Traceback (most recent call last):
  File "F:\Users\...\PyQGIS_Test_01.py", line 1, in <module>
    from qgis.core import *
ImportError: DLL load failed: The specified module could not be found.
CWDWILSO
la source

Réponses:

4

Vous devrez vous assurer que votre variable d'environnement PATH inclut le dossier dans lequel se trouvent les DLL python. Généralement sous [dossier_install_QGIS] \ apps \ qgis \ bin, par exemple

C:\Program Files (x86)\QGIS Valmiera\apps\qgis\bin

Jetez également un œil à Configurer PyScripter pour l'utiliser avec QGIS (et toujours utiliser arcpy) sur Windows Post assez ancien maintenant, mais devrait vous donner une idée de base de ce qui doit être configuré

mapoholic
la source
3

J'utilise OSGeo4W avec succès. Ce que vous devez faire est de définir:

PATH=C:\OSGeo4W\apps\qgis\bin;%PATH%

Et référence dans le code:

QgsApplication.setPrefixPath("C:\OSGeo4W\apps\qgis", True)
caiohamamura
la source
Cela ne fonctionne pas du tout pour moi.
SIslam