首页 > 编程语言 >qgis 3.30 python开发环境搭建

qgis 3.30 python开发环境搭建

时间:2024-03-06 17:15:20浏览次数:27  
标签:canvas qgis self python conda 3.30 import path

 

1.使用mamba加速conda下载qgis

conda install -c conda-forge -n base mamba

2.创建qgis虚拟环境

conda create -n qgis python=3.11
conda activate qgis(管理员CMD)
mamba install -c conda-forge qgis=3.30.0
mamba install -c conda-forge rasterio
mamba install -c conda-forge geopandas

安装命令,需要rasterio、geopandas的可以使用

 如果这样:

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

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

3.设置环境变量

打开Qgis:

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

Qgis的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()
View Code

 

标签:canvas,qgis,self,python,conda,3.30,import,path
From: https://www.cnblogs.com/shiningleo007/p/18057027

相关文章

  • 【Python基础】Python 函数返回多个值和函数注解
    [本文出自天外归云的博客园]Python函数返回多个值和函数注解在Python中,函数可以返回多个值。这在某些情况下很有用,因为它允许函数一次性返回多个相关联的结果。Python使用元组(tuple)来实现这一特性。函数返回多个值示例下面是一个示例函数,它接受一个整数和一个字符串作为......
  • Python涉及路径相关的知识点
    脚本中的路径信息print('__file__:',__file__)#脚本的位置print('os.path.abspath(__file__)::',__file__)#脚本的绝对路径(和上面的一般情况下是一样的)print('os.path.abspath(__file__):',os.path.abspath(__file__))SCRIPT_DIR=os.path.dirname(os.path.abspat......
  • Python list列表pop弹出内容del移除内容结果不对错误
    前言全局说明Pythonlist列表pop弹出内容del移除内容结果不对一、功能需求一个list列表,内容是1-9,用for循环打印,打印过的值,从列表中删除二、输出结果不对,代码有问题文件名:test.py#!/usr/bin/envpython3#coding:UTF-8#-*-coding:UTF-8-*-lists_1=['a','b']......
  • Python函数每日一讲 - hex()
    引言在Python编程中,处理十六进制数据是一项常见的任务。hex()函数就是Python中用于将整数转换为十六进制字符串的函数。本文将深入介绍hex()函数的使用方法,并通过实例演示其在实际应用中的作用,帮助大家更好地掌握这一工具。语句概览hex()函数是Python内置函数之一,用于将整数转......
  • Python-动态类型
    动态类型在Python中,类型是在运行时自动确定的,而不是通过代码声明,即Python没有必要事先声明变量。1.变量、对象和引用变量创建:一个变量在代码第一次给它赋值时就创建了它,之后的赋值将会改变已创建的变量的值;Python在代码运行之前会先检测变量名,是最初的赋值操作在创建变量。变......
  • 使用python编程实现多个csv文件数据的合并和输出
    具体代码importpandasaspdimportosdf01=pd.read_csv("D:\\12140\\Desktops\\111\\t11.csv",encoding='utf-8',dtype='str')df02=pd.read_csv("D:\\12140\\Desktops\\111\\t12.csv",encoding='utf-......
  • /usr/bin/install: 无法更改“/usr/local/python397/bin“ 的权限: 没有那个文件或目
    /usr/bin/install:无法更改“/usr/local/python397/bin“的权限:没有那个文件或目录dragoo1于2021-09-2116:39:21发布阅读量3.7k收藏9点赞数4分类专栏:python文章标签:pythoninstall没有那个文件或目录版权python专栏收录该内容3篇文章0订阅订阅专栏编译python......
  • Python实现五子棋人机对战的二次开发
    Python实现人机对战的二次开发    在网上找到了一个使用python实现五子棋游戏,其中通过加入一个简单的AI算法实现了人机对战的功能,我觉得这个人机对战还是蛮有意思的,下面我分析一下五子棋游戏的规则、棋盘表示方法、AI算法的实现原理以及代码实现过程。最后二次开发时引入新的......
  • python-合并大型Excel
    使用openpyxl库实在是太慢,使用openpyxl的只读模式又需要excel的准确尺寸信息,但是每个excel的尺寸都不一样。我使用zipfile解压excel文件,直接读取xml文件进行合并:importosfromopenpyxlimportload_workbookfromopenpyxlimportWorkbookimportzipfileimportretotal_......
  • Rust 开发的高性能 Python 包管理工具,可替换 pip、pip-tools 和 virtualenv
    最近,我在Python潮流周刊中分享了一个超级火爆的项目,这还不到一个月,它在Github上已经拿下了8Kstar的亮眼成绩,可见其受欢迎程度极高!国内还未见有更多消息,我趁着周末把一篇官方博客翻译出来了,分享给大家。作者:@charliermarsh译者:豌豆花下猫@Python猫英文:uv:Pythonpackag......