QT编程之QGIS
一、QGIS介绍
Quantum GIS(QGIS)是开源地理信息系统桌面软件,使用GNU(General Public License)授权, 属于 Open Source eospatial Foundation( OSGeo )的官方计划。在 GNU 授权下,开发者可以自行检阅与调整程序代码, 并保障让所有使用者可以免费且自由地修改程序。
QGIS 的目标是成为一个 GIS系统,提供常见的功能与特征。借着核心特征提供基本功能与附加组件(Python 或 C++) 持续地扩充,让使用者可以浏览、管理、编辑、分析数据以及制图。
QGIS 是一群自愿者所开发的项目,为程序代码提供缺陷修复、报告以及文件等贡献。它是由热心的使用者和开发社群 所维护的。它提供了交互式的邮件列表,以及通过网络管道传达给其他用户与开发人员帮助与建议。另外,它也提供 商业定制化开发。
二、核心功能与特点
-
核心功能
- 数据管理:支持本地文件、数据库(PostGIS)及在线服务(WMS/WFS)的加载与编辑。
- 制图与可视化:提供符号化工具、地图标注及布局设计,支持导出高质量印刷地图。
- 空间分析:集成GRASS GIS工具链,支持缓冲区分析、叠加运算等基础到高级分析。
- 三维场景:通过Qgis2threejs插件实现基础三维渲染,但功能较ArcGIS的ArcGlobe/ArcScene简化。
-
技术生态
- 插件市场:涵盖地图配图、遥感解译、网络分析等3000+插件(如Processing Toolbox、SAGA GIS)。
- 云端扩展:支持与QGIS Server结合发布Web地图服务,兼容GeoNode等开源平台。
三、与ArcGIS对比分析
| 维度 | QGIS | ArcGIS |
|---|---|---|
| 成本 | 完全免费开源 | 商业授权(按模块/用户计费) |
| 学习曲线 | 需熟悉开源工具链,社区资源分散 | 界面直观,官方培训体系完善 |
| 行业应用 | 适合学术研究、轻量级项目 | 企业级应用(如国土、城市规划) |
| 三维能力 | 基础三维渲染(依赖插件) | 专业三维分析(ArcGlobe/ArcScene) |
四、QGIS下载安装
QGIS下载
-
官方网站
- 最新版本(功能丰富):访问 QGIS 官网 或 OSGeo中文分会页面 下载。Windows 用户可选择以下安装包:
- 独立安装程序(64位/32位)
- OSGeo4W 网络安装程序(64位/32位),安装时选择 桌面Express安装 以获取最新版本。
- 长期支持版(LTR)(稳定性优先):通过 OSGeo4W 安装程序选择 高级安装 → QGIS-LTR长期支持版 。
从 OSGeo4W 官网 下载osgeo4w-setup.exe,建议选择 64位版本。安装时选择国内镜像源(如http://gwmodel.whu.edu.cn/mirrors/osgeo4w)以提升下载速度。
- 最新版本(功能丰富):访问 QGIS 官网 或 OSGeo中文分会页面 下载。Windows 用户可选择以下安装包:
-
其他平台
- macOS:下载官方签名的一体式安装程序,支持 macOS High Sierra (10.13) 及以上系统。
- Linux:通过包管理器(如
apt或yum)安装,或从官网获取对应发行版安装包。
QGIS安装
-
Windows 系统
- 独立安装程序:双击下载的
.exe文件,按提示完成安装(默认路径或自定义路径)。 - OSGeo4W 安装程序:运行安装程序后,选择 Express Desktop Install → 勾选最新版本组件。
- 独立安装程序:双击下载的
-
macOS 系统
- 打开
.dmg文件,将 QGIS 拖拽至应用程序文件夹完成安装。
- 打开
-
Linux 系统
- 终端执行命令(以 Debian/Ubuntu 为例):
sudo apt install qgis
QGIS中文界面设置
- 打开 QGIS,进入菜单栏 Settings → Options。
- 在 General 选项卡中,将语言调整为 简体中文,点击 OK 保存。
- 重启 QGIS 生效。

五、开发环境搭建
1、配置 Qt 项目文件(.pro 文件)
在 Qt Creator 中打开您的项目的 .pro 文件,然后添加 QGIS 的头文件路径和库路径。假设您使用的是 OSGeo4W 安装的 QGIS,路径可能类似于 C:\OSGeo4W64\apps\qgis\include 和 C:\OSGeo4W64\apps\qgis\lib。配置代码如下:
# 添加 QGIS 的头文件路径
INCLUDEPATH += C:/OSGeo4W64/apps/qgis/include# 添加 QGIS 的库文件路径
LIBS += -LC:/OSGeo4W64/apps/qgis/lib# 链接 QGIS 库
LIBS += -lqgis_core -lqgis_gui -lqgis_analysis
2. 引用 QGIS 头文件
在您的代码中,您现在可以直接引用 QGIS 的头文件,例如:
#include <qgsproject.h>
#include <qgsvectorlayer.h>
3. 设置环境变量(可选)
确保在运行项目时,QGIS 和 GDAL 的动态链接库(DLL)可以被找到。OSGeo4W 通常会配置好环境变量,但如果未自动配置,可以手动将 C:\OSGeo4W64\bin 添加到系统的 PATH 环境变量中。
六、QT创建基于QGIS窗口
1)用户界面设计,利用Qt的UI设计器或代码编写方式,设计用户界面。
2)编写核心代码
地图显示: 使用QgsMapCanvas类创建地图画布,加载矢量数据、栅格数据等。
空间分析: 利用QGIS提供的空间分析函数,实现缓冲区分析、叠加分析等。
数据处理: 实现数据的读取、写入、转换等操作。
自定义工具: 编写自定义工具,实现特定功能。
#include <QApplication>
#include <QMainWindow>#include <qgsmapcanvas.h>
#include <qgsrasterlayer.h>
#include <qgsmaptoolpan.h>int main(int argc, char** argv)
{// 创建QGIS应用程序对象QApplication qgisApp(argc, argv);// 创建主窗口QMainWindow mainWindow;// 创建地图画布对象QgsMapCanvas mapCanvas;// 创建并加载栅格图层(tif格式文件)QgsRasterLayer rasterLayer(R"(D:\work\LH\15\bj\bj.tif)");// 将图层添加到地图画布中mapCanvas.setLayers({ &rasterLayer });// 设置地图画布的显示范围为图层的范围mapCanvas.setExtent(rasterLayer.extent());// 刷新地图画布以应用更改mapCanvas.refresh();// 创建并设置平移工具,允许在地图上平移QgsMapToolPan panTool(&mapCanvas);mapCanvas.setMapTool(&panTool);// 将地图画布设置为主窗口的中央部件mainWindow.setCentralWidget(&mapCanvas);// 显示主窗口mainWindow.show();// 运行QGIS应用程序的事件循环return qgisApp.exec();
}
七、QT插件
1)创建插件工程: 创建一个新的插件工程。
2)实现插件功能: 在插件中实现自定义功能,如添加菜单项、工具栏按钮等。
3)加载插件: 将插件加载到QGIS中。
7.1 插件创建流程
-
生成插件模板
- 使用
plugin_builder.py生成基础插件框架(需适配Python3语法),生成包含plugin.cpp和pluginguibase.ui的目录结构。 - 修改
CMakeLists.txt中Qt版本标识(如替换QT4_*为QT5_*)。
- 使用
-
编译插件工程
- 通过CMake生成VS/Qt Creator工程,解决编译错误(如头文件路径调整或C++标准升级至C++17)。
- 编译后生成
.dll文件,存放于QGIS插件目录(如C:\OSGeo4W\apps\qgis\plugins)。
7.2 核心开发要点
-
界面与功能集成
- 使用 Qt Designer 设计插件UI(如添加
QgsMapCanvas控件),通过.ui文件生成界面类。 - 实现地图交互工具(如平移、缩放):
QgsMapToolPan *panTool = new QgsMapToolPan(mapCanvas);mapCanvas->setMapTool(panTool);
- 使用 Qt Designer 设计插件UI(如添加
-
数据操作示例
- 加载矢量图层:
QgsVectorLayer *layer = new QgsVectorLayer("Point?crs=EPSG:4326", "points", "memory"); QgsProject::instance()->addMapLayer(layer); - 读取坐标文件:通过
QFile和QTextStream解析文本文件,生成要素并添加到图层。
- 加载矢量图层:
7.3 调试与发布
-
调试技巧
- 使用
qDebug()输出日志,或通过QgsMessageLog记录运行信息。 - 启用Qt Creator调试器定位内存泄漏或逻辑错误。
- 使用
-
插件部署
- 将编译后的
.dll文件与资源(如图标、翻译文件)打包,复制到QGIS插件目录。 - 在QGIS插件管理器中启用插件,验证功能稳定性。
- 将编译后的
八、资源推荐
- 官方文档:QGIS C++ API(核心类参考)
- 示例项目:Qt/C++进行QGis插件开发模板:QgisPlugin: 使用Qt/C++进行QGis插件开发的基本模板
相关文章:
QT编程之QGIS
一、QGIS介绍 Quantum GIS(QGIS)是开源地理信息系统桌面软件,使用GNU(General Public License)授权, 属于 Open Source eospatial Foundation( OSGeo )的官方计划。在 GNU 授权下&am…...
福特售后再添亮点,为烈马模块化车身改装提供专业支持
2024年5月17日,中国上海 2024 年北京国际车展期间,纯血敞篷越野车国产福特烈马正式上市并公布全系厂商指导价,价格区间为29.98万元至43.88万元。作为一台风格鲜明,个性突出的纯血硬核越野车,诞生于1966年的福特烈马&a…...
嵌入式C语言中堆栈管理与数据存储的精髓
在嵌入式开发中,理解C语言的内存管理和数据存储机制是至关重要的。本文将从堆栈管理和数据存储两个方面,深入探讨C语言在嵌入式Linux开发中的应用。 一、堆栈管理 1.1 栈的初始化与作用 栈是C语言运行的基础,主要用于存储函数参数、局部变量、函数返回值和编译器生成的临时…...
003_快乐数
链接:202. 快乐数 - 力扣(LeetCode) 202.快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为…...
【MySQL数据库】约束
在MySQL数据库中,约束(Constraint)是用于限制表中数据的一种规则,目的是为了确保数据的完整性以及一致性。下面我们就从建表时的约束、建表后如何添加约束等几个方面,讲解MySQL中常用的几种约束。 创建时约束 分类 非空约束 非空…...
SANS 网络安全 网络安全三件套
基本设置篇 一、在线安全的四个误解 Internet实际上是个有来有往的世界,你可以很轻松地连接到你喜爱的站点,而其他人,例如黑客也很方便地连接到你的机器。实际上,很多机器都因为自己很糟糕的在线安全设置无意间在…...
LSTM方法实践——基于LSTM的汽车销量时序建模与预测分析
Hi,大家好,我是半亩花海。本实验基于汽车销量时序数据,使用LSTM网络(长短期记忆网络)构建时间序列预测模型。通过数据预处理、模型训练与评估等完整流程,验证LSTM在短期时序预测中的有效性。 目录 一、实验…...
[Windows] 轻量级景好鼠标录制器 v2.1 单文件版,支持轨迹+鼠标键盘录制复刻
[Windows] 轻量级景好鼠标录制器 链接:https://pan.xunlei.com/s/VOLHz0rPyqdhV4bgyTYuW6W7A1?pwd98uj# 软件特性: 高效播放控制:动作间隔优化至100 ms,进度条可视化,支持随机循环/多次播放。 深度自定义࿱…...
表单 schema 配置化
一、前沿 基于 Ant Design Vue 组件库实现了表单的配置化生成,通过 schema 配置化的方式实现表单的动态渲染、数据绑定和更新等功能,而提交按钮及获取数据逻辑由使用方自行提供。通过 schema 对象来定义表单的结构和属性,modelData 对象存储…...
LINUX --- KVM
什么是 KVM?– 基于内核的虚拟机简介 – AWS (amazon.com) 什么是 KVM? 基于内核的虚拟机(KVM)是一种软件功能,您可以将其安装在物理 Linux 机器上以创建虚拟机。虚拟机是一种软件应用程序,可作为另一台实…...
LabVIEW VI Scripting实现连接器窗格自动化
通过VI Scripting自动化配置连接器窗格,可大幅提升开发效率、统一接口规范,并适配动态需求。以下为真实场景中的典型应用案例,涵盖工业、汽车电子及教育领域,展示其实际价值与实施效果。 特点: 程序化配置:…...
网络安全信息收集[web子目录]:dirsearch子目录爆破全攻略以及爆破字典结合
目录 一、dirsearch 工具详细使用攻略 1. 安装 前提条件 安装步骤 可选:直接下载预编译版本 2. 基本用法 命令格式 参数说明 示例 3. 核心功能与高级用法 3.1 多线程加速 3.2 自定义字典 3.3 递归扫描 3.4 过滤响应 3.5 添加请求头 3.6 代理支持 3…...
【Msq8.0无需登陆进行重置密码】
【Msq8.0无需登陆进行重置密码】 Mysql的正常启动设置Msql的无密码登陆前操作 Mysql的正常启动 我使用的是Mac电脑,电脑上的Mysql8.0是处于运行状态,如果关闭状态也可以。 设置Msql的无密码登陆前操作 我们对Markdown编辑器进行了一些功能拓展与语法支…...
pandas表格内容比较
前阵子来了一个211大学实习生(小男生),要比较2个版本字段的变化,辅助完成系统升级字段替换,要求找出哪些字段是新增的,哪些字段是删除的,哪些字段是属性信息修改的,要求半天时间搞定…...
TMS320F28P550SJ9学习笔记13: 软件I2C_驱动AT24Cxx存储芯片
今日尝试配置软件I2C通信,我的目标通信芯片是AT24C64,相较于AT24C02这样的8位寻址,它是16位寻址的,所以有些不同 文章提供测试代码讲解、完整工程下载、测试效果图 目录 软件I2C引脚初始化: C内联函数改变SCL与SDA的输…...
Vuex 基础概念与环境搭建
Vuex 是实现数据集中式状态管理的插件。所有组件共享 Vuex 中的数据,当任意组件修改数据时,其他组件会同步更新。与全局事件总线的区别在于: 全局事件总线:数据传递但未真正共享Vuex:数据存储在中央仓库,实…...
手抖预防方法主要包括以下几个方面
手抖预防方法主要包括以下几个方面: 1. 心理调节:保持心情舒畅,避免过度紧张和焦虑。如有必要,可以寻求心理医生帮助进行心理调适。 2. 充分休息:保证充足的睡眠时间,避免熬夜和过度劳累。合理安排工作和…...
使用libwebsocket写一个server
lws-minimal-ws-server这些例程在buildroot里面,更新的话只能整体编译,十分麻烦和耗时,在sdk外面建立项目,单独开发,会更合适。 创建程序文件夹和文件 mkdir ./ws_cam cd ./ws_cam cp ../luckfox-pico/sysdrv/source…...
SpringBoot MCP 入门使用
随着AI的火爆,最近发现MCP在未来确实大有可为,作为一名javaer怎么可以落后在历史洪流呢,根据官网和cursor也从零开始体验一下自定义mcp server。以后可以根据自己业务场景做出各种适合自身业务的工具。 至于什么是MCP 可以到https://modelcon…...
Windows 11 安装Docker Desktop环境
1、确认CPU开启虚拟化 打开任务管理器,切换到“性能”选项卡,查看 CPU 信息。若“虚拟化”状态显示为“已启用”,则表示虚拟化已开启;若显示为“已禁用”,则需要在启动时进入 BIOS 开启虚拟化设置(若显示已…...
C++ STL算法函数 —— 应用及其操作实现
一、STL算法函数分类概述 STL算法库提供了大量实用函数,按功能可分为以下五类: 1. 不修改序列的操作 定义:这些算法不会改变容器中的元素,仅对数据进行查询或统计。 典型函数: 函数功能示例find(first, last, value…...
汽车保养记录用什么软件记录,汽车维修记录查询系统,佳易王汽车保养维护服务记录查询管理系统操作教程
一、概述 本实例以佳易王汽车保养维护服务记录查询管理系统为例说明,其他版本可参考本实例。试用版软件资源可到文章最后了解,下载的文件为压缩包文件,请使用免费版的解压工具解压即可试用。 软件特点:1、功能实用,操…...
深入理解C/C++堆数据结构:从原理到实战
一、堆的本质与特性 1.1 什么是堆数据结构? 堆(Heap)是一种特殊的完全二叉树,它满足以下核心性质: 堆序性:每个节点的值都满足特定顺序关系 结构性:完全二叉树的结构特性(除最后一…...
WebRTC中音视频服务质量QoS之RTT衡量网络往返时延的加权平均RTT计算机制详解
WebRTC中音视频服务质量QoS之RTT衡量网络往返时延加权平均RTT计算机制的详解 WebRTC中音视频服务质量QoS之RTT衡量网络往返时延加权平均RTT计算机制的详解 WebRTC中音视频服务质量QoS之RTT衡量网络往返时延加权平均RTT计算机制的详解前言一、 RTT 网络往返时延的原理1、…...
【MATLAB实战】实现白鲸算法(BWO)优化BP神经网络:提升模型性能的新思路
一、什么是白鲸优化算法(BWO)? 白鲸优化算法是受自然界中白鲸群体行为和觅食策略启发的一种新型智能优化算法。白鲸在捕食过程中展现出高效的协作能力和适应性,例如通过“回声定位”搜索猎物位置群体间信息共享,这些行…...
多页pdf转长图
单页pdf直接打印-onenote-在该页右键,另存为图片即可。 多页pdf,期望保存为一张图片,直接可用的都需要money。可通过python库来完成: import os from pdf2image import convert_from_path from PIL import Image, ImageDrawdef …...
医疗资源联动,广州长泰医院与海南德雅医院共筑地贫防治新篇章
为贯彻落实"健康中国"战略关于出生缺陷综合防治的部署要求,推动地中海贫血防治体系建设。2025年3月15日,广州长泰医院与海南德雅医院联合主办的“地中海贫血生殖遗传干预大型义诊暨合作签约仪式”在广州正式启动,活动以“爱与希…...
2024年12月CCF-GESP编程能力等级认证C++编程三级真题解析
三级真题的难度: CCF-GESP编程能力等级认证的C++三级真题难度通常被认为是中等水平,适合具备一定编程基础的考生。以下是关于三级真题难度的一些具体信息: 1. 考试内容 C++三级考试主要涵盖以下几个方面的知识: 基本语法:包括数据类型、变量、运算符等基础知…...
DeepSeek在医学领域的应用
DeepSeek作为高性能AI大模型,在医学领域的应用场景广泛,结合其在数据处理、自然语言理解和深度学习方面的优势,显著推动了医疗行业的智能化转型。以下是其核心应用场景及具体案例: 1. 辅助诊断与决策支持 临床辅助诊断࿱…...
【机器学习】机器学习工程实战
文章目录 第1章 概述1.1 符号和定义1.1.1 数据结构1.1.2大写西格玛记法 1.2 什么是机器学习 书籍简介 【加】安德烈布可夫(Andriy Burkov ) 著 王海鹏 丁静 译 中国工信出版集团 人民邮电出版社 第1章 概述 1.1 符号和定义 1.1.1 数据结构 标量(scala…...
