我想从独立脚本访问QGIS之外的Python中的爆炸线功能。
我必须加载哪个模块才能使用它?
我该如何访问processing
?
from qgis.core import *
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
processing.runalg('qgis:explodelines', layerInput, 'temp.shp')
我想从独立脚本访问QGIS之外的Python中的爆炸线功能。
我必须加载哪个模块才能使用它?
我该如何访问processing
?
from qgis.core import *
layerInput = QgsVectorLayer('test.shp', 'test', 'ogr')
processing.runalg('qgis:explodelines', layerInput, 'temp.shp')
Answers:
更新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邮件列表讨论。
'/home/user/.qgis2/python/plugins'
。您可以通过打开QGIS并单击plugins/Manage and install plugins
向下滚动到处理位置来找到位置,然后在说明中看到安装位置。
cannot-create-a-qpixmap
这个独立的功能,但我看你解决了过这个问题 gis.stackexchange.com/questions/188074/...
layerInput
和更改runalg行:general.runalg(*sys.argv[1:])
且不说这个脚本可以并行处理GIS按照这一问题的基础:gis.stackexchange.com/questions/119961/...
在开始使用通用方法之前,我将告诉您一种解决方法。
我使用处理插件版本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
)中
注意:关于通用方式(即按名称调用算法),我发现了一些在发布之前需要解决的问题。一旦它开始工作,我将其发布。
import processing
。