在网上搜索一番后得到了解决问题的方法,要通过processing方法,使用工具箱功能需要额外配置环境变量,我根据下面这两个帖子进行了设置。
针对QGIS二次开发时环境搭建的坑(解决no module named qgis、no module named processing)
1、在python的代码中将processing所在的位置引入环境变量,直接引用processing
由于课题需要,使用QGIS构建自动处理的程序,在QGIS中的Python控制台中运行代码太不方便,索性将运行的环境搬到了Pycharm上。
首先需要在Pycharm上配置pyqgis的环境,在网站上已经有许多文章,我这里就不过多赘述,下面贴个链接大家自己配置即可。
PyCharm配置QGIS二次开发_吴道简的博客-CSDN博客
简单的说就是把QGIS中的python-qgis-ltr.bat设置为pycharm中的解释器即可。
在配置好环境之后发现可以调用pyqgis的包了,包括qgis.core、qgis.gui等等。但是我在运行之前的程序时发现编译器报错。在运行至使用工具箱功能时会提示无法使用,但是相同的程序在QGIS中的控制台运行无误。
from qgis.core import *
import processing
#加载道路
path_to_roads='D:\QGIS_Data\data\qgis_sample_data.v2\exercise_data\epsg4326\\road4.gpkg'
out_path_to_roads='D:\QGIS_Data\data\qgis_sample_data.v2\exercise_data\epsg4326\\road422.gpkg'
roads=QgsVectorLayer(path_to_roads, "roads", "ogr")
# 配置道路缓冲区参数
parameter_dictionary_road = {
'INPUT': roads,
'DISTANCE': 50,
'SEGMENTS': 5,
'DISSOLVE': True,
'OUTPUT': out_path_to_roads,
'END_CAP_STYLE': 0,
'JOIN_STYLE': 0,
'MITER_LIMIT': 10
}
roads_buffer = processing.run("native:buffer", parameter_dictionary_road)
print('缓冲区创建成功')
在网上搜索一番后得到了解决问题的方法,要通过processing方法,使用工具箱功能需要额外配置环境变量,我根据下面这两个帖子进行了设置。
针对QGIS二次开发时环境搭建的坑(解决no module named qgis、no module named processing)
1、在python的代码中将processing所在的位置引入环境变量,直接引用processing
import sys
sys.path.append(r'D:\\QGIS\\apps\\qgis\\python\\plugins')
import processing
2、在环境变量中创建 PYTHONPATH 字段,将以下地址引入环境变量中。
在重新运行程序后发现还是报错,缓冲区功能没有找到。
在外网搜寻一番后发现是processing的引用有问题,需要对Processing进行初始化操作才能正常引用。
3、将Processing进行初始化
import sys
sys.path.append(r'D:\\QGIS\\apps\\qgis\\python\\plugins')
from processing.core.Processing import Processing
Processing.initialize()
import processing
这下代码就没问题了,运行成功!
附新完整代码:
from qgis.core import *
import sys
sys.path.append(r'D:\\QGIS\\apps\\qgis\\python\\plugins')
from processing.core.Processing import Processing
Processing.initialize()
import processing
#加载道路
path_to_roads='D:\QGIS_Data\data\qgis_sample_data.v2\exercise_data\epsg4326\\road4.gpkg'
out_path_to_roads='D:\QGIS_Data\data\qgis_sample_data.v2\exercise_data\epsg4326\\road422.gpkg'
roads=QgsVectorLayer(path_to_roads, "roads", "ogr")
# 配置道路缓冲区参数
parameter_dictionary_road = {
'INPUT': roads,
'DISTANCE': 50,
'SEGMENTS': 5,
'DISSOLVE': True,
'OUTPUT': out_path_to_roads,
'END_CAP_STYLE': 0,
'JOIN_STYLE': 0,
'MITER_LIMIT': 10
}
roads_buffer = processing.run("native:buffer", parameter_dictionary_road)
print('缓冲区创建成功')