Вместе с этим постом я пытался запустить скрипт в оболочке OSGeo4w вне QGIS. Но я получаю следующую ошибку:
ImportError: нет модуля с именем qgis.core
Я также прочитал следующие посты и попытался импортировать различные модули, но безрезультатно:
- Как запустить алгоритмы sextante за пределами консоли Python QGIS?
- Как запустить простой скрипт на Python для QGIS извне (например, Sublime Text)?
- Написание автономных скриптов Python с использованием PyQGIS?
Вот простой скрипт, который создает сетку и накладывает на нее многоугольный шейп-файл.
Примечание. Этот скрипт был протестирован и успешно работает при запуске в 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
После ответа и сценария, опубликованного @gcarrillo, я наконец смог qgis.core.
успешно импортировать модули. Сценарий, предоставленный @gcarrillo, запускается, но я получаю сообщение об ошибке трассировки:
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
Джозеф
источник
источник
Ответы:
Наконец-то нашли правильный способ запуска алгоритмов обработки в автономных скриптах PyQGIS.
Этот ответ основан на ответах на проблему с импортом qgis.core при написании автономного скрипта PyQGIS и на ошибку: алгоритм не найден , что, в свою очередь, основано на обсуждении в списке рассылки Qgis-dev .
Я предлагаю вам следовать рабочему процессу, указанному в разделе Проблема с импортом qgis.core, при написании автономного скрипта PyQGIS для включения библиотек QGIS в оболочку OSGeo4W. После того, как ваши библиотеки QGIS работают должным образом, мы можем перейти ко второй части вашего вопроса: запуску алгоритмов обработки в автономном скрипте PyQGIS.
Я немного изменил ваш оригинальный скрипт и протестировал его в Windows 7 и GNU / Linux. Я использую обработку версии 2.2.0-2 и предлагаю вам использовать эту версию, которая является текущей на момент написания ответа.
Обратите внимание, что я вынул создание сетки из цикла for, так как вам не нужна новая сетка для выполнения каждого клипа.
Это должно сработать!
источник
Processing
папку на рабочем столе, аналогичную той, которая содержится в/qgis.2
папке. Должно ли это случиться?Этот ответ основан на ответах на Проблема с импортом qgis.core при написании автономного скрипта PyQGIS и на Как я могу получить доступ к «обработке» с помощью Python? ,
Я предлагаю вам следовать рабочему процессу, указанному в разделе Проблема с импортом qgis.core, при написании автономного скрипта PyQGIS для включения библиотек QGIS в оболочку OSGeo4W. После того, как ваши библиотеки QGIS работают должным образом, мы можем перейти ко второй части вашего вопроса: запуску алгоритмов обработки в автономном скрипте PyQGIS.
Как в Как я могу получить доступ к `обработке` с помощью Python? Я дам вам обходной путь, пока не смогу запустить алгоритмы по имени (например,
processing.runalg('provider:algorithm_name')
). Я использую обработку версии 2.2.0-2 и предлагаю вам использовать эту версию.Мы можем использовать консоль QGIS Python, чтобы выяснить, где находится скрипт алгоритма в папках плагина обработки. Например, чтобы узнать, откуда импортировать
qgis:creategrid
, напишите в консоли QGIS Python:Вы должны получить:
этого достаточно, чтобы мы заметили и модуль path (
processing.algs.qgis.mmqgisx.MMQGISXAlgorithms
), и класс алгоритма (mmqgisx_grid_algorithm
). Вы будете использовать эту информацию в сценарии ниже.Я немного изменил ваш скрипт и протестировал его в Windows 7. Возможно, вам придется скорректировать пути, чтобы запустить скрипт в вашей собственной среде.
Это должно сработать!
Как вы можете видеть, я создал папку Test / Grids, чтобы вы сохраняли отдельный шейп-файл сетки вместо создания временного файла в каждом цикле for, что, по-видимому, не нужно.
источник
Test/Grids/
перед запуском скрипта./Grids/
папку и файл grid.shp создан. Это работает отлично! Проблема в другом.path_dir + "Grids\grid.shp"
, который был быC:\Users\your_username\Desktop\Test\Grids\grid.shp
Мне пришлось внести небольшие изменения в сценарий, предоставляемый @gcarrillo, чтобы включить путь OSGEO4W64 (мне пришлось переустановить QGIS через установщик OSGEO4W64, так как я изначально использовал автономный установщик) и включить двойные слэши. Вот финальный сценарий и большое спасибо всем за помощь:
источник