Tôi đang phát triển gói RQGIS. Để chạy QGIS từ bên trong R, tôi gọi QGIS thông qua dòng lệnh. Điều này đã làm việc hoàn hảo với QGIS 2.14. Tuy nhiên, việc chạy cùng mã với QGIS 2.16 sẽ tạo ra lỗi. Đây là những gì tôi làm:
Đầu tiên, tôi đặt tất cả các đường dẫn cần thiết trong dấu nhắc lệnh:
@echo off
SET OSGEO4W_ROOT=D:\osgeo4w_qgis16
call "%OSGEO4W_ROOT%"\bin\o4w_env.bat
@echo off
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\bin
set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\apps\qgis\python;
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT%\apps\qgis
rem open python
python.exe
Sau đó, tôi chạy các dòng sau trong Python:
import os
import sys
from qgis.core import *
import qgis.utils
from osgeo import ogr
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.gui import *
QgsApplication.setPrefixPath('D:\osgeo4w_qgis16\apps\qgis', True)
app = QgsApplication([], True)
QgsApplication.initQgis()
sys.path.append(r'D:\osgeo4w_qgis16\apps\qgis\python\plugins')
from processing.core.Processing import Processing
Processing.initialize()
import processing
processing.alglist()
processing.alghelp("grass7:v.voronoi")
Những công việc này. Tuy nhiên, đang gọi xử lý.
from processing.tests.TestData import points
result = processing.runalg('grass7:v.voronoi', points(), False, False, '270778.60198,270855.745301,4458921.97814,4458983.8488', -1, 0.0001, 0, None,)
... Tạo thông báo lỗi này:
Error in sys.excepthook:
Traceback (most recent call last):
File "D:\osgeo4w_qgis16\apps\qgis\python\qgis\utils.py", line 196, in qgis_excepthook
showException(type, value, tb, None, messagebar=True)
File "D:\osgeo4w_qgis16\apps\qgis\python\qgis\utils.py", line 107, in showException
open_stack_dialog(type, value, tb, msg)
File "D:\osgeo4w_qgis16\apps\qgis\python\qgis\utils.py", line 142, in open_stack_dialog
iface.messageBar().popWidget()
AttributeError: 'NoneType' object has no attribute 'messageBar'
Original exception was:
Traceback (most recent call last):
File "<stdin>", line 10, in <module>
File "D:\osgeo4w_qgis16\apps\qgis\python\plugins\processing\tools\general.py", line 75, in runalg
alg = Processing.runAlgorithm(algOrName, None, *args, **kwargs)
File "D:\osgeo4w_qgis16\apps\qgis\python\plugins\processing\core\Processing.py", line 304, in runAlgorithm
ret = runalg(alg, progress)
File "D:\osgeo4w_qgis16\apps\qgis\python\plugins\processing\gui\AlgorithmExecutor.py", line 52, in runalg
progress.error(e.msg)
AttributeError: 'NoneType' object has no attribute 'error'
alg.execute(progress)
bởialg.execute(progress or SilentProgress())
trong AlgorithmExecutor.py sử dụng QGIS trong một ứng dụng tùy chỉnh. Vấn đề đã trở nên tồi tệ hơn kể từ bây giờ không có thông báo lỗi xảy ra. Thay vào đó, thậm chí có thông báo thành công (ví dụ: khi chạysaga:catchmentarearecursive
), chỉ các thư mục đầu ra được chỉ định vẫn trống. Tôi sẽ đánh giá rất cao nếu bạn có thể khắc phục vấn đề đó. Hay tôi đang thiếu một cái gì đó?