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插件开发的基本模板