用Python访问`processing`吗?


16

我想从独立脚本访问QGIS之外的Python中爆炸线功能

我必须加载哪个模块才能使用它?

我该如何访问processing

from qgis.core import *

layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')

processing.runalg('qgis:explodelines', layerInput, 'temp.shp')

2
我认为您必须使用import processing
2015年

@Joseph抱歉,没有具体说明:但是我想从独立脚本中访问它。
ustroetz

啊,不用担心:)。在那种情况下,很抱歉,但我不知道,因为我总是在QGIS中运行它。希望其他人会提出建议。
2015年

@ustroetz,您好,您是否设法通过独立脚本运行此脚本?我问是因为我也在尝试运行外部脚本。
约瑟夫

@Joseph不,我没有
ustroetz

Answers:


25

更新2018年4月24日:此处查看如何在QGIS v3.x中执行此操作


对于QGIS v2.x

最终找到了通过独立的PyQGIS脚本运行处理算法的正确方法。

使用Processing插件版本2.2.0-2,可以尝试以下脚本:

# Prepare the environment
import sys
from qgis.core import *
from PyQt4.QtGui import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Prepare processing framework 
sys.path.append('/home/user/.qgis2/python/plugins') # Folder where Processing is located
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *

# Run the algorithm
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
general.runalg('qgis:explodelines', layerInput, 'temp.shp')

# Exit applications
QgsApplication.exitQgis()
QApplication.exit()

较新的处理版本可能位于/usr/share/qgis/python/plugins,因此您可能需要相应地使用sys.path.append('/usr/share/qgis/python/plugins')

我在“ 错误:找不到算法”中找到了工作示例,该示例又基于Qgis-dev邮件列表讨论


1
处理插件可能不在'/home/user/.qgis2/python/plugins'。您可以通过打开QGIS并单击plugins/Manage and install plugins向下滚动到处理位置来找到位置,然后在说明中看到安装位置。
紫色先生

2
我收到了许多警告有关cannot-create-a-qpixmap这个独立的功能,但我看你解决了过这个问题 gis.stackexchange.com/questions/188074/...
紫先生

1
您可以独立脚本更通用的通过删除layerInput和更改runalg行:general.runalg(*sys.argv[1:])且不说这个脚本可以并行处理GIS按照这一问题的基础:gis.stackexchange.com/questions/119961/...
先生紫色

是否可以执行相同的框架,但可以通过独立的Python(不在QGIS内部)运行PLUGINS?我执行了alglist()函数,但看不到我的QGIS中安装的插件...
Irene

3

在开始使用通用方法之前,我将告诉您一种解决方法。

我使用处理插件版本2.2.0-2(建议您使用此版本),该版本已安装在/home/germap/.qgis2/python/plugins/我的计算机上。您需要知道此文件夹的位置,因为您是从那里导入处理模块的。

由于您知道提供者(qgis)和算法(explodelines),因此您可以查看/home/germap/.qgis2/python/plugins/processing/algs/qgis/爆炸行脚本名称:Explode.py该信息使您可以将算法直接导入到Python独立脚本中。

因此,打开一个Python控制台并复制以下脚本(我使用GNU / Linux,因此默认情况下设置了环境变量,从而使我能够轻松导入qgis和PyQt4库):

# Prepare the environment
import sys
from PyQt4.QtGui import *
from qgis.core import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Tell Python where you will get processing from
sys.path.append('/home/germap/.qgis2/python/plugins')

# Reference the algorithm you want to run
from processing.algs.qgis.Explode import *
alg = Explode() 

# Set input and output
inLayer = QgsVectorLayer('/home/user/data/in.shp', 'input', 'ogr')
outLayer = '/home/user/data/out.shp'
alg.setParameterValue('INPUT', inLayer)
alg.setOutputValue('OUTPUT', outLayer)

# Run the algorithm
from processing.core.SilentProgress import SilentProgress
progress = SilentProgress()
alg.processAlgorithm(progress)

如果您没有收到错误消息,仅此而已。输出图层已保存在您指定的输出路径(/home/user/data/out.shp)中

注意:关于通用方式(即按名称调用算法),我发现了一些在发布之前需要解决的问题。一旦它开始工作,我将其发布。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.