Spędziłem sporo czasu szukając jasnej odpowiedzi na ten temat i nadal nie byłem w stanie naprawdę osiągnąć celu, jakim jest uzyskanie dostępu do PyQGIS w samodzielnym skrypcie.
Części odpowiedzi udzielono na wiele różnych pytań, takich jak:
Samodzielne aplikacje korzystające z QGIS i zmiennych środowiskowych
pyQgis w skrypcie samodzielnym, błąd ładowania wektora
Pisz samodzielne skrypty Pythona za pomocą PyQGIS?
Najbardziej szczegółową odpowiedź, którą znalazłem, dostarczyłem tutaj @gene .
Szczególnie interesuje mnie możliwość pisania skryptów, które mogą wywoływać zarówno Arcpy, jak i PyQGIS. Ustawiłem zmienne systemowe PATH i PYTHONPATH zgodnie z dokumentacją książki kucharskiej PyQGIS jako:
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\
i
C:\OSGeo4W\apps\qgis\python; C:\OSGeo4W\apps\Python27\Lib\site-packages
Odpowiednio.
Zaczynam od tego skryptu:
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)
Staram się unikać skryptów wsadowych, które ustawiają odpowiednie ustawienia, ale raczej wywołuję je z poziomu skryptu Python. Dla mnie optymalnym scenariuszem byłoby użycie IDLE w folderze ArcGIS 10.2 do uruchomienia poprzedniego kodu. Używam komputera z systemem Windows 7 z ArcGIS 10.2 i QGIS 2.01.
Obecnie wyniki tego kodu to:
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.