前提,该文章阅读需要对qt库和c++有一定学习基础。
目录
1.环境配置
参考以下连接配置QGIS开发环境流程 | 湛泸兔子
官方API文档:QGIS API Documentation: QGIS
2.基础功能实现
代码中的成员变量如图所示。
QgsMapCanvas* mapCanvas; // 地图画布
QList<QgsMapLayer*> mapCanvasLayerSet; // 地图画布所用的图层集合
2.1 加载数据
数据可分为矢量数据和栅格数据,对应着后缀分别为.shp和.tif,分别由类QgsVectorLayer和QgsRasterLayer支持数据加载功能。
QString filename = QFileDialog::getOpenFileName(this, tr("open vector"), "", "*.shp *.tif");
QStringList temp = filename.split(QDir::separator());
QString basename = temp.at(temp.size() - 1);
QgsVectorLayer* vecLayer = new QgsVectorLayer(filename, basename);
矢量数据加载如上图代码所示,qgsvectorlayer类初始化,getopenfilename为获取数据文件名。
QString filename = QFileDialog::getOpenFileName(this, tr("open vector"), "", "*.shp *.tif");
QStringList temp = filename.split(QDir::separator());
QString basename = temp.at(temp.size() - 1);
QgsRasterLayer * rasLayer = new QgsRasterLayer(filename, basename);
同理,栅格数据的加载与矢量数据相同。
2.2 显示数据
以矢量数据的加载为例,将数据加载进画布集合中并显示。
QgsProject::instance()->addMapLayer(vecLayer);
mapCanvasLayerSet.append(vecLayer);
mapCanvas->setExtent(vecLayer->extent());
mapCanvas->setLayers(mapCanvasLayerSet);
mapCanvas->setVisible(true);
mapCanvas->freeze(false);
mapCanvas->refresh();
其中mapcanvaslayerset类型为QList<QgsMapLayer*>,为地图画布的图层集合;mapcanvas为加载数据显示的画布,栅格数据同理。显示效果如下图所示,左侧图层管理器等功能等待下篇文章。