qgis 3.30 python二次开发环境搭建,一遍过教程

2023-11-13

1.使用mamba加速conda下载qgis

在base环境下输入以下命令:

conda install -c conda-forge -n base mamba

2.创建qgis虚拟环境

conda create -n qgis python=3.11
conda activate qgis
mamba install -c conda-forge qgis=3.30.0

经过测试,上面的python和qgis版本,与rasterio、geopandas兼容。附上安装命令,需要rasterio、geopandas的可以使用。

mamba install -c conda-forge rasterio
mamba install -c conda-forge geopandas

3.设置环境变量

上面安装的qgis还不能直接使用,假如使用的话,会是这样:

(qgis) PS C:\Users\anita> python

>>> import qgis
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'qgis'

这时在conda的qgis虚拟环境下,输入qgis,稍等片刻会打开qgis 3.30.0软件

(base) C:\Users\123>conda activate qgis
(qgis) C:\Users\123>qgis

点击qgis软件菜单栏的插件>python控制台,打开python控制台,输入以下命令:

import sys
sys.path

在这里插入图片描述
复制输出的结果数组,在base环境下输入以下命令,这样环境就配置好了。

conda activate base
mamba install conda-build -c conda-forge
conda develop [你复制的数组] -n qgis

在这里插入图片描述

4.测试代码

效果如下:
在这里插入图片描述
代码如下:

from qgis.core import *
from qgis.gui import *
from qgis.PyQt.QtWidgets import *
from qgis.PyQt.QtGui import *
from qgis.PyQt.QtCore import *

from os.path import *
import sys

class MyWnd(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.resize(1200, 800)
        self.setWindowTitle("GIS软件")
        self.canvas = QgsMapCanvas()
        self.canvas.setCanvasColor(Qt.white)
        self.canvas.setVisible(True)
        self.canvas.xyCoordinates.connect(self.showXY)

        self.actionZoomIn = QAction("放大工具", self)
        self.actionZoomOut = QAction("缩小工具", self)
        self.actionPan = QAction("平移工具", self)
        self.actionOpenRas = QAction("打开影像", self)

        self.actionZoomIn.setCheckable(True)
        self.actionZoomOut.setCheckable(True)
        self.actionPan.setCheckable(True)

        self.actionZoomIn.triggered.connect(self.zoomIn)
        self.actionZoomOut.triggered.connect(self.zoomOut)
        self.actionPan.triggered.connect(self.pan)
        self.actionOpenRas.triggered.connect(self.openDialogRas)

        self.toolbar = QToolBar("Canvas actions")
        self.addToolBar(self.toolbar)
        self.toolbar.addAction(self.actionZoomIn)
        self.toolbar.addAction(self.actionZoomOut)
        self.toolbar.addAction(self.actionPan)
        self.toolbar.addAction(self.actionOpenRas)

        self.root = QgsProject.instance().layerTreeRoot()
        self.model = QgsLayerTreeModel(self.root,self)
        self.model.setFlag(QgsLayerTreeModel.AllowNodeReorder)
        self.model.setFlag(QgsLayerTreeModel.AllowNodeChangeVisibility)
        self.tocView = QgsLayerTreeView()
        self.tocView.setModel(self.model)
        self.tocView.setFixedWidth(200)
        self.bridge = QgsLayerTreeMapCanvasBridge(self.root, self.canvas,self)

        # create the map tools
        self.toolPan = QgsMapToolPan(self.canvas)
        self.toolPan.setAction(self.actionPan)
        self.toolZoomIn = QgsMapToolZoom(self.canvas, False)  # false = in
        self.toolZoomIn.setAction(self.actionZoomIn)
        self.toolZoomOut = QgsMapToolZoom(self.canvas, True)  # true = out
        self.toolZoomOut.setAction(self.actionZoomOut)

        centralWidget = QWidget()
        hLayout = QHBoxLayout()
        hLayout.addWidget(self.canvas)
        hLayout.addWidget(self.tocView)
        centralWidget.setLayout(hLayout)
        self.setCentralWidget(centralWidget)

        self.pan()

    def zoomIn(self):
        self.canvas.setMapTool(self.toolZoomIn)

    def zoomOut(self):
        self.canvas.setMapTool(self.toolZoomOut)

    def pan(self):
        self.canvas.setMapTool(self.toolPan)

    def openDialogRas(self):
        path_to_tif = QFileDialog.getOpenFileName()[0]
        if  path_to_tif=="":
            return
        self.addRaster(path_to_tif)
    
    def openDialogVec(self):
        path_to_vec = QFileDialog.getOpenFileName()[0]
        if  path_to_vec=="":
            return
        self.addVector(path_to_vec)

    def addRaster(self, path):
        layer = QgsRasterLayer(path,basename(path))
        if not layer.isValid():
            QMessageBox.information(self, '提示', '文件打开失败', QMessageBox.Ok)
            return
        layer.dataProvider().setNoDataValue(1,0)
        QgsProject.instance().addMapLayers([layer])
        self.canvas.setLayers([layer])
        self.canvas.setExtent(layer.extent())
        self.canvas.refresh()

    def showXY(self,point):
        m_statusBar=self.statusBar()
        m_statusBar.showMessage("Coordinate:"+str(point.x())+","+str(point.y()))

if __name__ == "__main__":
    QgsApplication.setPrefixPath("./qgis_init", True)
    qgs = QgsApplication([], False)
    qgs.initQgis()

    w = MyWnd()
    w.show()
    sys.exit(qgs.exec_())

    qgs.exitQgis()

5.qgis库代码提示

把 anaconda主环境\pkgs\qgis-3.30.0\Library\python\qgis 这个文件夹复制到​anaconda\envs\qgis\Lib\site-pacakages\qgis里面,然后就有代码提示了。

6.参考链接和推荐链接

参考链接:
https://blog.csdn.net/weixin_43226768/article/details/120270364
https://github.com/anitagraser/QGIS-resources/blob/master/qgis3/notebooks/hello-world.ipynb

推荐链接:
pyqgis官方指南
pyqgis api查询文档
pyqt api查询文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qgis 3.30 python二次开发环境搭建,一遍过教程 的相关文章

随机推荐

  • Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 随着互联网的发展 越来越多的用户通过互联网来交流 电子邮件成为人们日常生活交流的重要工具 用户每星期可能收到
  • react条件渲染

    在React 中 你可以创建不同的组件来封装各种你需要的行为 然后 依据应用的不同状态 只渲染对应状态下的部分内容 React中的条件渲染和javascript中的一样 使用javascript运算符if或者条件运算符去创建元素来表现当前的
  • Jog运动模式

    Jog 运动 就是按住按键 电机一直走 弹起按键电机停止 在 Jog 运动模式下 各轴可以独立设置目标速度 加速度 减速度 平滑系数等运动参数 能 够独立运动或停止 轴 1 运动在 Jog 模式下 初始目标速度为 100pulse ms 动
  • 【iOS】获取当前 NSViewController 的 window 以及其所在 NSWindowController 的 window

    前言 场景 登录成功后 我们需要关闭当前登录页的 NSViewController 以及 NSWindowController 这时就需要获得当前的 window 进行关闭 解决 这里分别针对 NSView NSViewController
  • 【CV中的Attention机制】ShuffleAttention

    GiantPandaCV导语 这个系列已经好几个月没有更新了 开始继续更这个方向论文 19年 20年又出现了很多关于Attention的研究 本文SA Net shuffle attention for deep convolutional
  • python操作leveldb数据库

    1 leveldb简介 优点 1 leveldb是一个开源的持久化的键值数据库 2 具有很高的随机写 顺序读写性能 但是随机读性能一般 适合写多读少的场景 在一台4核Q6600的CPU机器上 每秒钟写数据超过40w 而随机读的性能每秒钟超过
  • vue小技巧:性能优化使用篇 => 路由/tab切换取消当前页面异步请求

    tab在前端是非常常见的一个组件 在vue里面 结合了双向绑定原理 更是将页面无感刷新提升到了极致 假设每个tab选项都需要请求一次接口 做一次异步操作 但是假如我们有一个手速超快的人 我摊牌了 就是我 他在一秒钟内能切换3次tab选项 也
  • redis zset利用并集求差集

    解决的痛点是缓存里的数据结构 zset 有序集合 它只能做并集 交集 不能做差集 我的需求是需要它做差集 总的内容缓存 差 用户已看的缓存 就能得到 用户没有看的 也就是接下来要给用户看的内容我的思路是利用并集操作完成 内容的缓存池 val
  • Unity中关于Destroy的API

    Unity中关于Destroy的API 常用的关于Destory的API 销毁游戏物体 Destroy gameObject 从游戏物体删除该脚本 Destroy this 从游戏物体删除刚体 Destroy rigidbody 加载物体5
  • 红帽官宣新任总裁兼 CEO!转型关键人物 Paul Cormier “退而不休”

    整理 郑丽媛 出品 CSDN ID CSDNnews 在今年 5 月的红帽峰会上 曾有传言称红帽总裁兼 CEO Paul Cormier 可能很快就会退休 事实证明 这一传言有所偏差 Paul Cormier 的确要退位 但并没有打算退休
  • 「干货分享」DevExpress常用控件——RichEditControl使用指南

    做WinForms的一般都知道 传统 NET界面有一个RichTextBox控件 这个是一个富文本控件 可以存储图片文字等内容 它有自己的文件格式RTF 在DevExpress控件组里面也有一个同等的控件 他的名字是RichEditCont
  • k8s-如何快速编写yaml文件(新手)

    k8s 如何快速编写yaml文件 新手 1 使用kubectl create 命令生成yaml文件 kubectl create depolyment web image nginx o yaml dty run depolyment 工作
  • 升级到Window11体验

    1 把禁掉的微软更新服务开启 2 去官网按照指导来 用微软账号 3 打开Window预览体验计划 比较慢 不要开代理不然会有错误 多转几圈多等一会儿 其次就是最近网络有问题虽然能够上网图标却显示未连接Internet 4 登录之前在官网弄的
  • 操作系统修炼秘籍(1):秘籍简介

    毋庸置疑 操作系统 Operating System OS 是一个非常大的概念 涉及到的内容非常非常多 在探讨它的时候 往往会将操作系统置于一个比较底层的角度去对待 这也使得多数人对OS是 闻之丧胆 对OS相关的资料或概念也是望而却步 这也
  • python编程基础-task5-面向对象的编程

    一 类的例子 class Song object class表示要创建类 Song是类的名称 def init self lyrics self lyrics lyrics 这里是设置了lyrics是的全局变量 后面的类里都可以使用这个参数
  • 数据结构——线性表

    线性表 线性表是最基本的 最常见的一种数据结构 1 1 前驱元素 若A元素在B元素的前面 则称A为B的前驱元素 后继元素 若B元素在A元素的后面 则称B为A的后继元素 1 2 线性表的特征 数据元素之间只有一对一的关系 第一个数据元素没有前
  • 初识Node.js与内置模块

    目录 1 初识 Node js 1 1 回顾与思考 1 2 Node js 简介 1 3 Node js 环境的安装 2 fs 文件系统模块 2 1 什么是 fs 文件系统模块 2 2 读取指定文件中的内容 2 3 向指定的文件中写入内容
  • MyCAT简易入门

    MyCAT简易入门 MyCAT是mysql中间件 前身是阿里大名鼎鼎的Cobar Cobar在开源了一段时间后 不了了之 于是MyCAT扛起了这面大旗 在大数据时代 其重要性愈发彰显 这篇文章主要是MyCAT的入门部署 一 安装java 因
  • 印度 SaaS 的崛起

    引言 云创新作为全球范围的努力已超过二十年 改变了整个行业 现在 印度正在成为一个新兴的全球领导者 推动了技术创新和显著的企业家精神 SaaS在全球范围内继续加速发展 因为各行业和企业都在向云上转移 随着数字化持续增长 印度成立的SaaS初
  • qgis 3.30 python二次开发环境搭建,一遍过教程

    qgis 3 30 python二次开发环境搭建 一遍过教程 1 使用mamba加速conda下载qgis 2 创建qgis虚拟环境 3 设置环境变量 4 测试代码 5 qgis库代码提示 6 参考链接和推荐链接 1 使用mamba加速co