QGIS二次开发:显示本地地图

直接安装

1
sudo apt install libqgis-dev

工程

按照标准流程创建一个MainWindow工程

在pro配置中修改

1
2
3
4
5
QT += xml network # 这个是qgis库的依赖
# 头文件和库文件
INCLUDEPATH += /usr/include/qgis/

LIBS += -lqgis_core -lqgis_gui -lqgis_server -lqgis_app -lqgis_native -lproj -lgdal

代码

mainwindow.h

添加头文件

1
2
3
4
5
6
#include <QMainWindow>
#include <QFileDialog>
#include <QMessageBox>

#include "qgsmapcanvas.h"
#include "qgsvectorlayer.h"

添加成员变量

1
2
3
4
private:
QgsMapCanvas *mapCanvas;

QList<QgsMapLayer *> layers;

mainwindow.cpp

在构造函数里面创建画布

1
2
3
4
5
6
mapCanvas = new QgsMapCanvas();
this->setCentralWidget(mapCanvas);

mapCanvas->setCanvasColor(QColor(255, 255, 255));
mapCanvas->setVisible(true);
mapCanvas->enableAntiAliasing(true);

在ui中添加一个打开菜单

菜单

在对应槽函数里面添加 打开shp文件 功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QString fileName = QFileDialog::getOpenFileName(this, tr("Open shape file"), "", "*.shp");
QStringList temp = fileName.split('/');
QString basename = temp.at(temp.size() - 1);
QgsVectorLayer* vecLayer = new QgsVectorLayer(fileName, basename, "ogr");

if (!vecLayer->isValid())
{
QMessageBox::critical(this, "error", QString("layer is invalid: \n") + fileName);
return;
}

mapCanvas->setExtent(vecLayer->extent());
layers.append(vecLayer);
mapCanvas->setLayers(layers);
mapCanvas->refresh();

效果

打开OSM地图数据geofabrik网站

geofabrik

随便下载一个shp文件,推荐Antarctica,因为它比较小。

编译运行程序

使用Open菜单选择下载的shp格式文件

shp文件

选择gis_osm_water_a_free_1.shp

效果


QGIS二次开发:显示本地地图
https://blog.jackeylea.com/qgis/show-local-shp-map/
作者
JackeyLea
发布于
2023年10月7日
许可协议