Qgis python开发教程(一)Introduction

2023-10-27

最近工作中用到Qgis开发,找了网上一圈,关于python的开发很少,最后找到官方API,官方API很不错,但是英文难免麻烦一些,自己尝试翻译出来并实践一下,以备自己后续的学习。(并非逐字逐句翻译,就是把自己认为重点的地方记录摘要,水平有限,多多指教)

官方API:https://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/intro.html

关于使用版本问题,参考我GIS类别下的一篇文章!

Introduction

有几种办法在QGIS中使用python,同时也可以在QGIS Server中使用:

1、在QGIS启动时,自动运行python

2、在QGIS中利用python交互行交互

3、创建使用python插件

4、基于QGIS API创建传统应用

当Qgis启动时,有两种不同方法运行Python代码:

1、通过设置PYQGIS_STARTUP环境变量到一个python file路径,来在QGIS初始化完成之前就执行此文件,这种方式很少用,但是用于cleaning sys.path。

2、每次QGIS启动,都默认在.qgis2/python中查找startup.py,启动QGIS自带的python解释器

Python Console

通过QGIS内置python控制台交互


上图中脚本获取当前选中的图层,并显示图层ID。如果图层是矢量图层,显示几何元素的数量。在QGIS的交互环境中,变量iface是QgsInterface的实例。这个实例可以来获取map canvas、menus、toolbars和其他QGIS应用的工具。为了方便用户,交互控制台打开时默认载入如下包:

from qgis.core import *
import qgis.utils

Python Plugins

Python Applications

通常在处理一下GIS数据时候,创建脚本来解决按下需要不停重复的任务是很有用的。通过PyQGIS,导入qgis.core模块,初始化这个模块,你就可以实现这个。

或者,你想用一些GIS功能如计算距离、导出pdf等来创建一下交互性的功能。qgus.gui模块提供了很多GUI组件,可以很容易的实现如放大缩小或其他地图工具等。

通过PyQGIS的应用或者独立脚本都必须配置到QGIS资源如投影信息、用于渲染矢量和栅格图层的providers等等。

Using PyQGIS in standalone scripts

要在独立脚本中使用qgis,需要初始化Qgis资源,脚本如下:

from qgis.core import *

# supply path to qgis install location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)

# create a reference to the QgsApplication, setting the
# second argument to False disables the GUI
qgs = QgsApplication([], False)

# load providers
qgs.initQgis()

# Write your code here to load some layers, use processing algorithms, etc.

# When your script is complete, call exitQgis() to remove the provider and
# layer registries from memory
qgs.exitQgis()

首先导入qigs.core核心包,其次配置前缀路径,前缀路径是QGIS在系统中的安装路径。第二个参数控制是否使用缺省路径。QGIS的安装路径随着系统不同而不同,获取系统安装路径前缀的最好方法时通过如下方法获取:

QgsApplication.prefixPath()

当配置了前缀路径后,在变量qgs配置了一个索引到QgsApplication,第二个参数false的意思是在独立脚本中不使用GUI模块。然后,我们通过qgs.initQgis()方法来载入QGIS data providers和layer。载入后,我们就可以自己写业务代码来处理数据,最后通过qgs.exitQgis()删除内存中的data providers和layer。

Using PyQGIS in custom applications

在传统应用模式下,与独立脚本的唯一区别就是把QgsApplication方法第二个参数设为true,即打开gui

from qgis.core import *

# supply path to qgis install location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)

# create a reference to the QgsApplication
# setting the second argument to True enables the GUI, which we need to do
# since this is a custom application
qgs = QgsApplication([], True)

# load providers
qgs.initQgis()

# Write your code here to load some layers, use processing algorithms, etc.

# When your script is complete, call exitQgis() to remove the provider and
# layer registries from memory
qgs.exitQgis()

Running Custom Applications

此处配置python解释器不详细说了,参考我GIS下的一篇配置文章

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

Qgis python开发教程(一)Introduction 的相关文章

  • 如何在 php 中添加形状文件 (.shp) 并在 php 文件中使用该形状文件数据?

    我必须在 php 中开发一个项目 并且必须包含形状文件 并且该形状文件需要转换为 kml 文件 我知道如何将形状文件转换为 kml 文件 但我不知道如何将形状文件导入 导入到 php 项目中 我还有包含更多信息的形状文件的支持文件 其中一些
  • Google 从 QGIS 元数据文件导入 XML

    我正在尝试使用 Google Sheets importxml 捕获 qmd 文件的元素 即 xml 标记 基于如何对 Google Drive 中的文件使用 importXML 函数 https stackoverflow com que
  • R中的光栅层

    我有一个包含多个 adf 文件的 GIS 项目 由于我是 ArcMap 的新手 我不知道如何使用它们 我设法使用光栅库将它们读入 r r lt raster w001001 adf 当查看 sum r 时 我得到 sum r class R
  • 找到两个多边形之间最短笛卡尔距离的最快方法是什么

    I have 1 个红色多边形说和50 个随机放置的蓝色多边形 它们位于地理2D space 找到红色多边形与其最近的蓝色多边形之间的最短距离的最快 速度测试算法是什么 请记住 这并不是将构成多边形顶点的点作为值来测试距离的简单情况 因为它
  • 在 R SF 中交叉大型空间数据集

    我有两个空间数据集 一个数据集包含许多多边形 总共超过 150k 指定不同的特征 如河流 植被 另一个数据集包含更少的指定不同区域的多边形 500 我需要将这两个数据集相交以获得不同区域的特征 我可以根据不同的特征对第一个数据集进行子集化
  • 更改 ggplot2 中栅格图的颜色

    由于一些不相关的原因 我尝试使用 ggplot2 而不是栅格包绘图函数来制作栅格图 我想缩放颜色 使图上的最低温度为蓝色 图上的最高温度为红色 而中间范围为白色 我已经尝试了 ggplot2 中的许多功能 但始终未能获得所需的结果 这就是我
  • GPS/GIS 计算:根据运动/每小时预测未来位置的算法?

    寻找资源或算法来在导航应用程序中计算以下内容 如果我当前的 GPS 位置为 0 0 并且我以 15 英里 小时的速度前进 32 度 我如何计算 10 秒后我的位置 i e GPSCoordinate predictedCoord GPSCo
  • 基于计数器递增 Python 字典值

    我有一本包含重复值的字典 Deca dict 1 2 506 2 2 506 3 2 506 4 2 600 5 2 600 6 1 650 我使用了 collections Counter 来计算每个集合的数量 decaAdd occur
  • 地理数据网络服务

    我正在考虑编写一个程序来检查英国议会议员最近提出的一些里程声明 实际上大约有 45 000 个里程 我所掌握的数据相当准确 旅行的出发地和目的地通常仅 在城镇级别提供 我想做的基本上是查看他们提交的里程数据 查看从网络服务获得的 计算 里程
  • GeoAlchemy2:获取某个点的经纬度

    考虑以下SQLAalchemy http www sqlalchemy org GeoAlchemy2 http geoalchemy 2 readthedocs org en 0 2 6 index html具有几何字段的 ORM fro
  • 将 R data.frame 转换为 Javascript 数组

    我想将数据框的某些列保存为特定格式 JavaScript 格式 我尝试过使用toJSON from rjson包但这不起作用 我的结果应该是这样的 http leaflet github io Leaflet markercluster e
  • 通过非 sf 列内连接两个 sf 对象

    我尝试使用内连接或左连接连接两个 sf 数据帧 这些数据框内部都有几何列 我不断收到错误 check join x y 中的错误 y 应该是一个数据框 对于空间连接 请使用 st joinFALSE 下面的可重现示例 df1 lt data
  • 有没有人在 Ubuntu 16.04 LTS 上安装 QGIS

    按照以下网址提供的说明进行操作 这一页 http www qgis org en site forusers alldownloads html并收到以下错误 以下软件包具有未满足的依赖关系 python qgis Depends pyth
  • 使用 SP 包中的 SpatialPoints() 转换坐标参考系 (CRS) 以创建空间数据框

    Issue 我有一个形状文件我已将其导入到 R 中 并为正在进行的分析选择了感兴趣的变量 我的最终目标是插值点数据 海豚 ID 获取海面温度 SST 堆栈中每个单独的光栅文件的值70 栅格来自名为 ncin SST 的对象 该对象是使用函数
  • Python 中使用 geoJSON 绘制多边形中的点

    我有一个包含大量多边形 特别是人口普查区 的 geoJSON 数据库 并且有很多长的纬度点 我希望存在一个有效的 Python 代码来识别给定坐标位于哪个人口普查区 但是到目前为止我的谷歌搜索还没有透露任何信息 Thanks 我发现了一个有
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • matplotlib 和地理数据图的纵横比

    我处理地理信息并使用以下方式呈现结果 matplotlib 所有输入都是纬度 经度 度 我转换成 x y 米 用于我的计算 我在中展示了我的结果 纬度 经度 问题是获得图形的纵横比 右 所有图表都太宽 是否有标准程序来设置 正确的纵横比 这
  • ggplot2 的 fortify 函数出错

    我在 ggplot2 中使用 fortify 方法时收到此错误 Error in function classes fdef mtable unable to find an inherited method for function pr
  • Python3.7 rasterio库打不开jp2

    我想从 Sentinel2 打开 jp2 图像 但是当我读取图像时 band rasterio open imagetest driver JP2OpenJPEG 我收到下一个错误 D DataStorage 00 sentinel dat
  • 在 QGis 中打开 Mapbox 地图

    我正在寻找一种在 QGis 中显示我的 Mapbox 地图的方法 在 mapbox com 上编辑的 Baselayer 以及从tilemill 上传的数据 这里有人已经找到方法了吗 有一个功能或插件可以做到这一点吗 感谢您未来的回答 Ad

随机推荐

  • 山路 (ghat)--(最短路-最小生成树//超级原点)

    感谢光神送来rating38000分的思路 题目描述 会和神奈子一起改变地形 开凿地下洞穴等 虽说是一起 不过看起来改变土地是诹访子的工作 与其说她是直接将大地整平 不如说这是她麾下的崇神的功劳 求闻口授 山路交错相同 令人烦躁 于是诹访子
  • MWeb发布笔记到印象笔记,提示“Content of submitted note was malformed”

    文章目录 issue solution 参考 issue MWeb发布笔记到印象笔记 提示 Error Domain com evernote sdk Code 11 Content of submitted note was malfor
  • 解决m1芯片Mac安装node失败问题

    用nvm安装node时终端报错 type aesni cbc sha256 enc avx2 function deps openssl config archs linux x86 64 asm avx2 crypto aes aesni
  • C/C++笔试必须熟悉掌握的头文件系列(五)——iostream

    1 说明 iostream 的意思是输入输出流 直接点说就是in out stream 流 从字面就可以理解这个函数库所要操作的无非是从流中获取输入 向终端流中输出 iostream 库的基础是两种命名为 istream 和 ostream
  • 清除IEXPLORER.EXE病毒

    E枭雄 Trojan Nethief IExplorer 病毒档案 网络枭雄 病毒的一个新变种 值得关注 警惕程度 发作时间 随机 病毒类型 木马病毒 传播方式 网络 感染对象 网络 病毒介绍 此 病毒是网络枭雄病毒的一个新变种 可以在Wi
  • vue中如何引入jquery详解

    用vue cli脚手架工具构建项目成功后 当需要引入JQ 可用以下方法 1 首先在package json里的dependencies加入 jquery 3 2 1 2 在终端里输入npm install jquery save dev 当
  • Reid Strong Baseline 代码解析

    目录 1 设置自己的数据集 1 1使用作者提供的dataset格式 1 2新建dataset格式 2 测试时设置是否只采用跨相机的样本 3 训练 3 1 修改模型 3 1 1参数解读 3 1 2使用自己的模型 4测试 5本篇博客的不足 1
  • 基于Python+OpenCV的视频字符化(深度学习+机器视觉)含全部工程源码

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 Python 环境 OpenCV环境 模块实现 1 视频读取及处理 2 色素块识别与替换 3 视频合成 4 操作系统上的实现 系统测试 工程源代码下载 其它资料下载 前言 本项目利
  • SQL - Navicat查看SQL执行计划

    我们在工作中肯定写过sql语句 也会进行一下sql语句的优化 在优化sql语句里看过相应的explain 在进行sql语句优化的时候 理解执行计划中各个参数的意思 弄明白执行的顺序 对sql优化有很大的帮助 1 通过 Explain 命令查
  • nestjs知识系列:使用postman测试websocket

    原文 Using WebSocket Requests Postman Learning Center websocket socket emit socket on等api详解 Using WebSocket Requests Postm
  • Linux Oracle使用常用命令

    ps ef grep oracle 查看Oracle启动的进程 常被用作查看Oracle服务是否已启动 登录Oracle sqlplus nolog conn as sysdba sqlplul as sysdba sqlplul as s
  • linux安装mysql8.0详解

    linux安装mysql8 0 一 安装前准备工作 二 安装mysql 三 配置mysql 一 安装前准备工作 1 卸载系统自带的mariadb root mesdb01 dbdata rpm qa grep mariadb mariadb
  • shell编程

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net Leo1120178518 article details 100055607 She
  • MUI扫描功能的实现

    开发手机APP时经常需要用到扫描二维码 条码的功能 在使用MUI框架开发时 我们可以使用H5plus封装好的Barcode类 Barcode模块管理条码扫描 提供常见的条码 二维码及一维码 的扫描识别功能 可调用设备的摄像头对条码图片扫描进
  • 整合springBoot+SSM及框架说明

    目录 1 关于springBoot的说明 1 1 springBoot的定义 1 2 springBoot的作用 2 关于springMVC的说明 2 1 springMVC的作用 3 Spring的的作用 4 mybatis的作用 一 创
  • 轻松搞懂Linux中的用户管理

    文章目录 概念 用户账户 用户组 用户权限 用户管理工具 概念 用户管理是Linux系统管理员必须掌握的重要技能之一 Linux系统是一个多用户操作系统 可以支持多个用户同时使用 每个用户拥有自己的账户和权限 因此管理员需要了解如何创建 管
  • vue之父子组件间通信实例讲解(props、$ref、$emit)

    组件是 vue js 最强大的功能之一 而组件实例的作用域是相互独立的 这就意味着不同组件之间的数据无法相互引用 那么组件间如何通信 也就成为了vue中重点知识了 这篇文章将会通过props ref和 emit 这几个知识点 来讲解如何实现
  • vue自定义指令

    除了核心功能默认内置的指令 v model 和 v show Vue 也允许注册自定义指令 有的情况下 对普通 DOM 元素进行底层操作 这时候就会用到自定义指令 下面定义了一个v test指令绑定数据name
  • jupyter的安装步骤

    1 安装python文件 首先去官网python去下载python的安装包 点击donwload 选择合适的系统 这里我是windown系统 点击进去 如图找到有installer的去下载 不建议下载最新版本的 会有兼容问题 2 安装pyt
  • Qgis python开发教程(一)Introduction

    最近工作中用到Qgis开发 找了网上一圈 关于python的开发很少 最后找到官方API 官方API很不错 但是英文难免麻烦一些 自己尝试翻译出来并实践一下 以备自己后续的学习 并非逐字逐句翻译 就是把自己认为重点的地方记录摘要 水平有限