Tôi đã dành khá nhiều thời gian để tìm kiếm một câu trả lời rõ ràng cho chủ đề này và vẫn không thể thực sự hoàn thành mục tiêu truy cập PyQGIS trong một kịch bản độc lập.
Các phần của câu trả lời đã được cung cấp qua nhiều câu hỏi khác nhau, chẳng hạn như:
Các ứng dụng độc lập sử dụng QGIS và các biến môi trường
pyQgis trong tập lệnh độc lập, lỗi tải vector
Viết kịch bản Python độc lập bằng PyQGIS?
Câu trả lời đầy đủ nhất mà tôi đã tìm thấy được cung cấp bởi @gene tại đây .
Điều tôi đặc biệt quan tâm, là có thể viết các kịch bản có thể gọi cả Arcpy và PyQGIS. Tôi đã đặt cả hai biến hệ thống PATH và PYTHONPATH theo tài liệu sách hướng dẫn nấu ăn PyQGIS là:
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\
và
C:\OSGeo4W\apps\qgis\python; C:\OSGeo4W\apps\Python27\Lib\site-packages
Tương ứng.
Tôi đang bắt đầu với kịch bản này:
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)
Tôi đang tìm cách tránh các tập lệnh bó đặt các cài đặt phù hợp, mà gọi chúng từ bên trong tập lệnh Python. Kịch bản tối ưu đối với tôi sẽ là sử dụng IDLE trong thư mục ArcGIS 10.2 để chạy mã trước đó. Tôi đang sử dụng máy Windows 7 với ArcGIS 10.2 và QGIS 2.01.
Hiện tại kết quả của mã này là:
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.