【QGIS】在Pycharm中使用pyqgis中的processing工具箱功能

在网上搜索一番后得到了解决问题的方法,要通过processing方法,使用工具箱功能需要额外配置环境变量,我根据下面这两个帖子进行了设置。

PyCharm QGIS环境配置

针对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方法,使用工具箱功能需要额外配置环境变量,我根据下面这两个帖子进行了设置。

PyCharm QGIS环境配置

针对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('缓冲区创建成功')

猜你喜欢

转载自blog.csdn.net/ximi2231/article/details/123203768