当前位置: 首页 > article >正文

QT编程之QGIS

一、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.kler.cn/a/586375.html

相关文章:

  • SQLAlchemy系列教程:批量插入数据
  • 卷积神经网络 - 一维卷积、二维卷积
  • 适合企业内训的AI工具实操培训教程(37页PPT)(文末有下载方式)
  • 基于6自由度搬运机器人完成单关节伺服控制实现的详细步骤及示例代码
  • opencv-显示图片
  • Mybatis语法bug
  • DeepSeek linux服务器(CentOS)部署命令笔记
  • React面试(二)
  • C语言基础知识04
  • 人工智能与人的智能,改变一生的思维模型分享【4】决策树
  • 有效的括号 力扣20
  • fprintf() 函数:C语言中的文件格式化输出利器
  • 机器学习_交叉验证
  • 大语言模型基础之‘显存优化‘
  • 【2025】Electron Git Desktop 实战一(上)(架构及首页设计开发)
  • 网络华为HCIA+HCIP数据链路层协议-以太网协议
  • uv命令介绍(高性能Python包管理工具,旨在替代pip、pip-tools和virtualenv等传统工具)
  • 设计一个高性能的分布式限流系统
  • ArcGIS Pro将有文字标注底图切换为无标注底图(在线地图图源)
  • PostgreSQL的学习心得和知识总结(一百七十一)|深入理解PostgreSQL数据库之 外连接消除 的使用和实现