QT编程之QGIS

news2025/3/16 15:30:50
一、QGIS介绍

        Quantum GIS(QGIS)是开源地理信息系统桌面软件,使用GNU(General Public License)授权, 属于 Open Source eospatial Foundation( OSGeo )的官方计划。在 GNU 授权下,开发者可以自行检阅与调整程序代码, 并保障让所有使用者可以免费且自由地修改程序。
        QGIS 的目标是成为一个 GIS系统,提供常见的功能与特征。借着核心特征提供基本功能与附加组件(Python 或 C++) 持续地扩充,让使用者可以浏览、管理、编辑、分析数据以及制图。
        QGIS 是一群自愿者所开发的项目,为程序代码提供缺陷修复、报告以及文件等贡献。它是由热心的使用者和开发社群 所维护的。它提供了交互式的邮件列表,以及通过网络管道传达给其他用户与开发人员帮助与建议。另外,它也提供 商业定制化开发。

二、核心功能与特点
  1. 核心功能

    • ‌数据管理‌:支持本地文件、数据库(PostGIS)及在线服务(WMS/WFS)的加载与编辑‌。
    • ‌制图与可视化‌:提供符号化工具、地图标注及布局设计,支持导出高质量印刷地图‌。
    • ‌空间分析‌:集成GRASS GIS工具链,支持缓冲区分析、叠加运算等基础到高级分析‌。
    • ‌三维场景‌:通过Qgis2threejs插件实现基础三维渲染,但功能较ArcGIS的ArcGlobe/ArcScene简化‌。
  2. 技术生态

    • ‌插件市场‌:涵盖地图配图、遥感解译、网络分析等3000+插件(如Processing Toolbox、SAGA GIS)。
    • ‌云端扩展‌:支持与QGIS Server结合发布Web地图服务,兼容GeoNode等开源平台‌。
三、与ArcGIS对比分析
维度QGISArcGIS
‌成本‌完全免费开源商业授权(按模块/用户计费)
‌学习曲线‌需熟悉开源工具链,社区资源分散‌界面直观,官方培训体系完善‌
‌行业应用‌适合学术研究、轻量级项目‌企业级应用(如国土、城市规划)‌
‌三维能力‌基础三维渲染(依赖插件)‌专业三维分析(ArcGlobe/ArcScene)‌
四、QGIS下载安装
     QGIS下载
  1. 官方网站
    • ‌最新版本‌(功能丰富):访问 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)以提升下载速度‌。
  2. 其他平台
    • ‌macOS‌:下载官方签名的一体式安装程序,支持 macOS High Sierra (10.13) 及以上系统‌。
    • ‌Linux‌:通过包管理器(如 apt 或 yum)安装,或从官网获取对应发行版安装包‌。
     QGIS安装
  1. Windows 系统
    • ‌独立安装程序‌:双击下载的 .exe 文件,按提示完成安装(默认路径或自定义路径)‌。
    • ‌OSGeo4W 安装程序‌:运行安装程序后,选择 ‌Express Desktop Install‌ → 勾选最新版本组件‌。
  2. macOS 系统
    • 打开 .dmg 文件,将 QGIS 拖拽至应用程序文件夹完成安装‌。
  3. Linux 系统
  4. 终端执行命令(以 Debian/Ubuntu 为例):
    sudo apt install qgis
   QGIS中文界面设置
  1. 打开 QGIS,进入菜单栏 ‌Settings → Options‌。
  2. 在 ‌General‌ 选项卡中,将语言调整为 ‌简体中文‌,点击 ‌OK‌ 保存‌。
  3. 重启 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 插件创建流程
  1. 生成插件模板

    • 使用 plugin_builder.py 生成基础插件框架(需适配Python3语法),生成包含 plugin.cpp 和 pluginguibase.ui 的目录结构‌。
    • 修改 CMakeLists.txt 中Qt版本标识(如替换 QT4_* 为 QT5_*)‌。
  2. 编译插件工程

    • 通过CMake生成VS/Qt Creator工程,解决编译错误(如头文件路径调整或C++标准升级至C++17)‌。
    • 编译后生成 .dll 文件,存放于QGIS插件目录(如 C:\OSGeo4W\apps\qgis\plugins)‌。
7.2 核心开发要点
  1. 界面与功能集成

    • 使用 ‌Qt Designer‌ 设计插件UI(如添加 QgsMapCanvas 控件),通过 .ui 文件生成界面类‌。
    • 实现地图交互工具(如平移、缩放):
      QgsMapToolPan *panTool = new QgsMapToolPan(mapCanvas);
       mapCanvas->setMapTool(panTool);
  2. 数据操作示例

    • ‌加载矢量图层‌:
      QgsVectorLayer *layer = new QgsVectorLayer("Point?crs=EPSG:4326", "points", "memory"); QgsProject::instance()->addMapLayer(layer);
    • ‌读取坐标文件‌:通过 QFile 和 QTextStream 解析文本文件,生成要素并添加到图层‌。
7.3 调试与发布
  1. 调试技巧

    • 使用 qDebug() 输出日志,或通过 QgsMessageLog 记录运行信息‌。
    • 启用Qt Creator调试器定位内存泄漏或逻辑错误‌。
  2. 插件部署

    • 将编译后的 .dll 文件与资源(如图标、翻译文件)打包,复制到QGIS插件目录‌。
    • 在QGIS插件管理器中启用插件,验证功能稳定性‌。

八、资源推荐

  • 官方文档‌:QGIS C++ API(核心类参考)‌
  • 示例项目‌:Qt/C++进行QGis插件开发模板:QgisPlugin: 使用Qt/C++进行QGis插件开发的基本模板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2316121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式C语言中堆栈管理与数据存储的精髓

在嵌入式开发中,理解C语言的内存管理和数据存储机制是至关重要的。本文将从堆栈管理和数据存储两个方面,深入探讨C语言在嵌入式Linux开发中的应用。 一、堆栈管理 1.1 栈的初始化与作用 栈是C语言运行的基础,主要用于存储函数参数、局部变量、函数返回值和编译器生成的临时…

LSTM方法实践——基于LSTM的汽车销量时序建模与预测分析

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本实验基于汽车销量时序数据&#xff0c;使用LSTM网络&#xff08;长短期记忆网络&#xff09;构建时间序列预测模型。通过数据预处理、模型训练与评估等完整流程&#xff0c;验证LSTM在短期时序预测中的有效性。 目录 一、实验…

[Windows] 轻量级景好鼠标录制器 v2.1 单文件版,支持轨迹+鼠标键盘录制复刻

[Windows] 轻量级景好鼠标录制器 链接&#xff1a;https://pan.xunlei.com/s/VOLHz0rPyqdhV4bgyTYuW6W7A1?pwd98uj# 软件特性&#xff1a; 高效播放控制&#xff1a;动作间隔优化至100 ms&#xff0c;进度条可视化&#xff0c;支持随机循环/多次播放。 深度自定义&#xff1…

LINUX --- KVM

什么是 KVM&#xff1f;– 基于内核的虚拟机简介 – AWS (amazon.com) 什么是 KVM&#xff1f; 基于内核的虚拟机&#xff08;KVM&#xff09;是一种软件功能&#xff0c;您可以将其安装在物理 Linux 机器上以创建虚拟机。虚拟机是一种软件应用程序&#xff0c;可作为另一台实…

LabVIEW VI Scripting实现连接器窗格自动化

通过VI Scripting自动化配置连接器窗格&#xff0c;可大幅提升开发效率、统一接口规范&#xff0c;并适配动态需求。以下为真实场景中的典型应用案例&#xff0c;涵盖工业、汽车电子及教育领域&#xff0c;展示其实际价值与实施效果。 特点&#xff1a; 程序化配置&#xff1a;…

网络安全信息收集[web子目录]:dirsearch子目录爆破全攻略以及爆破字典结合

目录 一、dirsearch 工具详细使用攻略 1. 安装 前提条件 安装步骤 可选&#xff1a;直接下载预编译版本 2. 基本用法 命令格式 参数说明 示例 3. 核心功能与高级用法 3.1 多线程加速 3.2 自定义字典 3.3 递归扫描 3.4 过滤响应 3.5 添加请求头 3.6 代理支持 3…

pandas表格内容比较

前阵子来了一个211大学实习生&#xff08;小男生&#xff09;&#xff0c;要比较2个版本字段的变化&#xff0c;辅助完成系统升级字段替换&#xff0c;要求找出哪些字段是新增的&#xff0c;哪些字段是删除的&#xff0c;哪些字段是属性信息修改的&#xff0c;要求半天时间搞定…

TMS320F28P550SJ9学习笔记13: 软件I2C_驱动AT24Cxx存储芯片

今日尝试配置软件I2C通信&#xff0c;我的目标通信芯片是AT24C64&#xff0c;相较于AT24C02这样的8位寻址&#xff0c;它是16位寻址的&#xff0c;所以有些不同 文章提供测试代码讲解、完整工程下载、测试效果图 目录 软件I2C引脚初始化&#xff1a; C内联函数改变SCL与SDA的输…

手抖预防方法主要包括以下几个方面

手抖预防方法主要包括以下几个方面&#xff1a; 1. 心理调节&#xff1a;保持心情舒畅&#xff0c;避免过度紧张和焦虑。如有必要&#xff0c;可以寻求心理医生帮助进行心理调适。 2. 充分休息&#xff1a;保证充足的睡眠时间&#xff0c;避免熬夜和过度劳累。合理安排工作和…

SpringBoot MCP 入门使用

随着AI的火爆&#xff0c;最近发现MCP在未来确实大有可为&#xff0c;作为一名javaer怎么可以落后在历史洪流呢&#xff0c;根据官网和cursor也从零开始体验一下自定义mcp server。以后可以根据自己业务场景做出各种适合自身业务的工具。 至于什么是MCP 可以到https://modelcon…

Windows 11 安装Docker Desktop环境

1、确认CPU开启虚拟化 打开任务管理器&#xff0c;切换到“性能”选项卡&#xff0c;查看 CPU 信息。若“虚拟化”状态显示为“已启用”&#xff0c;则表示虚拟化已开启&#xff1b;若显示为“已禁用”&#xff0c;则需要在启动时进入 BIOS 开启虚拟化设置&#xff08;若显示已…

汽车保养记录用什么软件记录,汽车维修记录查询系统,佳易王汽车保养维护服务记录查询管理系统操作教程

一、概述 本实例以佳易王汽车保养维护服务记录查询管理系统为例说明&#xff0c;其他版本可参考本实例。试用版软件资源可到文章最后了解&#xff0c;下载的文件为压缩包文件&#xff0c;请使用免费版的解压工具解压即可试用。 软件特点&#xff1a;1、功能实用&#xff0c;操…

深入理解C/C++堆数据结构:从原理到实战

一、堆的本质与特性 1.1 什么是堆数据结构&#xff1f; 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树&#xff0c;它满足以下核心性质&#xff1a; 堆序性&#xff1a;每个节点的值都满足特定顺序关系 结构性&#xff1a;完全二叉树的结构特性&#xff08;除最后一…

【MATLAB实战】实现白鲸算法(BWO)优化BP神经网络:提升模型性能的新思路

一、什么是白鲸优化算法&#xff08;BWO&#xff09;&#xff1f; 白鲸优化算法是受自然界中白鲸群体行为和觅食策略启发的一种新型智能优化算法。白鲸在捕食过程中展现出高效的协作能力和适应性&#xff0c;例如通过“回声定位”搜索猎物位置群体间信息共享&#xff0c;这些行…

医疗资源联动,广州长泰医院与海南德雅医院共筑地贫防治新篇章

​ 为贯彻落实"健康中国"战略关于出生缺陷综合防治的部署要求&#xff0c;推动地中海贫血防治体系建设。2025年3月15日&#xff0c;广州长泰医院与海南德雅医院联合主办的“地中海贫血生殖遗传干预大型义诊暨合作签约仪式”在广州正式启动&#xff0c;活动以“爱与希…

DeepSeek在医学领域的应用

DeepSeek作为高性能AI大模型&#xff0c;在医学领域的应用场景广泛&#xff0c;结合其在数据处理、自然语言理解和深度学习方面的优势&#xff0c;显著推动了医疗行业的智能化转型。以下是其核心应用场景及具体案例&#xff1a; 1. 辅助诊断与决策支持 临床辅助诊断&#xff1…

3.数据结构-串、数组和广义表

串、数组和广义表 3.1串3.1.1串的类型定义、存储结构及其运算串的顺序存储串的堆式顺序存储结构串的链式存储 3.1.2 串的模式匹配算法BF算法*KMP算法&#xff08;待更新&#xff09; 3.2数组3.2.1数组的顺序存储3.2.2特殊矩阵的压缩存储对称矩阵三角矩阵对角矩阵 3.3广义表*案例…

苹果电脑杀毒软件CleanMyMac

杀毒软件在苹果家族中是一个小众软件&#xff0c;百度搜索苹果电脑杀毒软件&#xff0c;可能各种杀软良莠不齐&#xff0c;因为在这个市场非常小&#xff0c;绝大多数都是冲着“清理”去的&#xff0c;而不是杀毒。最近测试了一款Mac电脑杀毒软件&#xff0c;杀毒效果也是一般般…

Day16:二叉搜索树和双向链表

将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 。 对于双向循环列表&#xff0c;你可以将左右孩子指针作为双向循环链表的前驱和后继指针&#xff0c;第一个节点的前驱是最后一个节点&#xff0c;最后一个节点的后继是第一个节点。 特别地&#xff0c;我们希望可以…

Qt QML实现弹球消砖块小游戏

前言 弹球消砖块游戏想必大家都玩过&#xff0c;很简单的小游戏&#xff0c;通过移动挡板反弹下落的小球&#xff0c;然后撞击砖块将其消除。本文使用QML来简单实现这个小游戏。 效果图&#xff1a; 正文 代码目录结构如下&#xff1a; 首先是小球部分&#xff0c;逻辑比较麻…