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对比分析
维度 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)以提升下载速度‌。

其他平台
  • ‌macOS‌:下载官方签名的一体式安装程序,支持 macOS High Sierra (10.13) 及以上系统‌。
  • ‌Linux‌:通过包管理器(如 aptyum)安装,或从官网获取对应发行版安装包‌。
QGIS安装
Windows 系统
  • ‌独立安装程序‌:双击下载的 .exe 文件,按提示完成安装(默认路径或自定义路径)‌。
  • ‌OSGeo4W 安装程序‌:运行安装程序后,选择 ‌Express Desktop Install‌ → 勾选最新版本组件‌。
macOS 系统
  • 打开 .dmg 文件,将 QGIS 拖拽至应用程序文件夹完成安装‌。
Linux 系统
  1. 终端执行命令(以 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
  1. 引用 QGIS 头文件

在您的代码中,您现在可以直接引用 QGIS 的头文件,例如:

复制代码
#include <qgsproject.h>
#include <qgsvectorlayer.h>
  1. 设置环境变量(可选)

确保在运行项目时,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.cpppluginguibase.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);
    • ‌读取坐标文件‌:通过 QFileQTextStream 解析文本文件,生成要素并添加到图层‌。

7.3 调试与发布
  1. 调试技巧

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

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

八、资源推荐

相关推荐
梦想家星空23 分钟前
优化 Java 数据结构选择与使用,提升程序性能与可维护性
java·开发语言·数据结构
手拿菜刀24 分钟前
c++学习系列----002.写文件
开发语言·c++·学习
鹿屿二向箔31 分钟前
在MATLAB/Simulink中建立电池模型(用于BMS仿真)
开发语言·matlab
江沉晚呤时38 分钟前
C# 建造者模式(Builder Pattern)详细讲解
java·开发语言·javascript·数据库·c#·.netcore·net
不讲废话的小白1 小时前
Python软件和搭建运行环境
开发语言·python
c-u-r-ry301 小时前
012---状态机的基本知识
开发语言·嵌入式硬件·fpga开发
鱼不如渔1 小时前
C++之OOP
开发语言·c++
weixin_399264291 小时前
c++ 封装、继承、重写、重载、多态性
开发语言·c++·算法
IT猿手1 小时前
基于雪雁算法(Snow Geese Algorithm,SGA)的多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码
开发语言·人工智能·算法·机器学习·matlab·无人机
Matlab仿真实验室2 小时前
基于Matlab实现机械臂阻抗控制仿真
开发语言·数学建模·matlab·机械臂阻抗控制仿真