利用QGIS 3.26.2实现GIS工程实战总结

1.前言


       QGIS作为一款开源的桌面GIS软件,其易用性、稳定性和可扩展性受到越来越多的技术人员和学者的好评与支持,并且基于社区的开发模式使QGIS的研发和迭代非常迅速。目前,QGIS已经具有完整且稳定的桌面GIS功能,并且逐渐地在移动GIS、web GIS等方向进行扩展,可以与众多开源GIS软件和模块相互支持,形成工具链,并构成功能全面的GIS软件体系,在开源GIS中具有独特且完整的应用前景。

     本博文通过QGIS开源库实现一个GIS工程,通过本工程,可以学习如何利用QGIS库建立自己的GIS工程。QGIS通过源码编译安装和非源码安装,请参考:

  1. Win10下通过源码编译安装QGIS
  2. VS2019+QT5.15.2+QGIS二次开发环境搭建(非源码方式)

2.开发环境简述

开发环境如下:

  • Windows 10 教育版 21H1 19043.928。
  • Qt 5.14.1。
  • QGIS 3.26.2。
  • Visual Studio 2019  版本16.4.5 。
  • CMake 3.23.0。

3.启动VS,创建Qt工程

      启动VS后,新建项目,搜索Qt,找到QtWidgetsApplication后进行创建新项目,我这里直接用默认名称QtWidgetsApplication1。
注意,在导入模块的时候要把XML勾选上,否则运行的时候会报错。如果这里不勾选,也可以创建好后,在VS中的扩展->QT VS Tools -> QT project settings ->Qt Modules中进行添加(下图)。 

 接着修改项目文件:
main.cpp

#include "QtWidgetsApplication1.h"
#include <QtWidgets/QApplication>
#include <qgsapplication.h>
 
int main(int argc, char *argv[])
{
    QgsApplication a(argc, argv, true);
    QgsApplication::setPrefixPath("F:/OSGeo4WQGIS/apps/qgis", true);
    QgsApplication::initQgis();    //初始化QGIS应用
 
    QtWidgetsApplication1 w;    //创建一个窗体,类似于Qt
    w.show();
    return a.exec();
}

QtWidgetsApplication1.h

#pragma once
#include "ui_QtWidgetsApplication1.h"
#include <QtWidgets/QMainWindow>
 
#include <qmenu.h>
#include <qaction.h>
#include <qgsmapcanvas.h>
 
class QtWidgetsApplication1 : public QMainWindow
{
    Q_OBJECT
 
public:
    QtWidgetsApplication1(QWidget *parent = Q_NULLPTR);
 
private:
    Ui::QtWidgetsApplication1Class ui;
    // create the menus and then add the actions to them.
    QMenu* fileMenu;
    QAction* openFileAction;
    //map canvas
    QgsMapCanvas* mapCanvas;
    QList<QgsMapLayer*> layers;
 
public slots:
    void on_openFileAction_triggered();
 
public:
    void addVectorLayer();
};

 QtWidgetsApplication1.cpp

#include "QtWidgetsApplication1.h"
 
#include <qmenubar.h>
#include <qmessagebox.h>
#include <qfiledialog.h>
 
#include <qgsvectorlayer.h>
 
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(600, 400);
 
    // create the menus and then add the actions to them.
    fileMenu = this->menuBar()->addMenu("File");
    openFileAction = new QAction("Open", this);
    this->connect(openFileAction, SIGNAL(triggered(bool)), this, SLOT(on_openFileAction_triggered()));
    fileMenu->addAction(openFileAction);
 
    // initialize the map canvas
    mapCanvas = new QgsMapCanvas();
    this->setCentralWidget(mapCanvas);
 
    mapCanvas->setCanvasColor(QColor(255, 255, 255));
    mapCanvas->setVisible(true);
    mapCanvas->enableAntiAliasing(true);
}
 
void QtWidgetsApplication1::on_openFileAction_triggered() 
{
    addVectorLayer();
}
 
void QtWidgetsApplication1::addVectorLayer()
{
    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();
}

4. 配置项目属性

C++ ->常规 -> 附加包含目录中添加以下项

C:\OSGeo4W\include
C:\OSGeo4W\apps\qgis\include

链接器 ->常规 -> 附加库目录中添加以下项:

C:\OSGeo4W\apps\qgis\lib

其中上述目录、库路径为Win10下通过源码编译安装QGIS博文编译安装之后生成的路径,请参见该博文并根据自己本机实际路径更改。 

在“链接器” ->”输入” -> “附加依赖项”中添加以下项:

qgis_app.lib
qgis_core.lib
qgis_gui.lib

如果遇到编译错误,请参考《VS2019+QT5.15.2+QGIS二次开发环境搭建(非源码方式)》博文解决。搜索C:\OSGeo4W目录下的所有的dll及plugins目录将其放到程序同一个目录下,启动, 

https://grass.osgeo.org/download/sample-data/  下载GIS测试样本数据。如下是选择rivers.shp后展示的河流release版本的运行效果:

注意:可以将一些不必要的dll删除,如:在release版本下可以删除debug版的Qt相关的dll。

在实际开发时,强烈建议用release版本的库开发,不要用debug,具体原因参见

 《Win10下通过源码编译安装QGIS》博文。

 5.启动工程及错误解决

https://grass.osgeo.org/download/sample-data/  下载GIS测试样本数据。启动debug版程序,选择测试数据,发现奔溃了,编译出的QGIS官方自带的gis.exe也崩溃。原因如下:

Win10下通过源码编译安装QGIS 博文提到的安装即官方提供的库好多是release版本的,即

QGIS-master 3.26.2 源码在debug版本下链接的是Release版本的库导致崩溃,当全部切换到Release版本下,程序不会崩溃,能正常运行。主要涉及到如下库:

  • qca-qt5.lib
  • Qt5WebKit.lib
  • Qt5WebKitWidgets.lib

QGIS-master 3.26.2 源码通过CMake编译(具体参见Win10下通过源码编译安装QGIS )生成的VS2019解决方案下的好多工程debug版下链接的是Release版本的库,从而导致奔溃。所以强烈建议:

在实际开发时,强烈建议用release版本的库开发,不要用debug,如果要设置断点,则按如下方法设置:

 以Vs2019为例
     打开工程属性页 - 配置选择release - 配置属性

          1、C/C++ - 常规 - 调试信息格式

               默认配置:空或无
               调试配置:程序数据库(/Zi)或(/ZI)

          2、C/C++ - 优化 - 优化

               默认配置:最大优化(优化速度)(/O2)
               调试配置:禁止(/Od)


          3、链接器 - 调试 - 生成调试信息

               默认配置:否
               调试配置:是(/DEBUG)

     备注: 若Release下需断点调试则对上面三条配置“调试配置”;而需取消Release断点调试则对上面三条设置"默认配置"即可。当调试好后,给客户版本时,请恢复到默认配置。


6.debug版本调试遇到的各种问题汇总

6.1.debug版的qca-qt5库生成

     从https://download.kde.org/stable/qca/    下载qca-qt5库的源码,注意:版本不能太高。本人通过测试发现,版本太高,如2.3.4, CMake生成VS的解决方案时会报错,不能生成VS解决方案。如下,本人选择的2.1.3版本:

通过CMake生成VS2019的解决方案后,编译出debug和release版本的qca-qt5的lib和dll,分别拷贝或替换OSGeo4W\apps\Qt5\bin\qca-qt5d.dll、OSGeo4W\apps\Qt5\bin\qca-qt5.dll、OSGeo4W\apps\Qt5\lib\qca-qt5d.lib、OSGeo4W\apps\Qt5\lib\qca-qt5.lib。

6.2. Qt5WebKit、Qt5WebKitWidgets库

因为 Qt5WebKit、Qt5WebKitWidgets库在Qt 5.1.0版本之后被剔除了,所以在高版本的Qt,如本人用的是5.14.1,不存在这两个库。解决方法为:从如下Qt官网

Index of /archive/qt

下载Qt 5.1.0版本安装到在本机,然后从安装目录下将Qt5WebKitd.dll、Qt5WebKit.dll、Qt5WebKitd.lib、Qt5WebKit.lib、Qt5WebKitWidgetsd.dll、Qt5WebKitWidgets.dll、Qt5WebKitWidgetsd.lib、Qt5WebKitWidgetslib分别拷贝或替换OSGeo4W\apps\Qt5\bin\ OSGeo4W\apps\Qt5\lib\ 对应的该文件。

在Qt 5.1.0安装目录下搜索出icudt51.dll、icuin51.dll、icuuc51.dll,因为打包主程序时要用到这几个dll。

因为Windows下的Qt 5.1.0用到VS 2012中的sdk,所以还需装个VS 2012,Visual Studio 2012 官方简体中文旗舰版下载地址一【官方链接】:点击这里直接下载

然后从VS2012安装目录下搜索出 msvcp110d.dll、msvcrpd.dll等库,后期打包要用。 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QGIS是一款自由开源的地理信息系统软件,其最新版本为3.22.12。通常情况下,我们需要通过安装程序来将软件安装到我们的计算机上。但是,有时候我们可能需要一个免安装的版本来方便地在不同的计算机上使用QGIS。幸运的是,QGIS提供了一个免安装版本供用户使用。 免安装版本的QGIS可以通过访问QGIS官方网站的下载页面来获取。在下载页面中,你可以找到一个标有“Standalone Windows Installer”的选项。点击该选项后,你将能够下载QGIS的ZIP文件。这个ZIP文件包含了QGIS的所有必要文件,你可以将其解压到你喜欢的任何位置。 解压缩后,你可以直接运行QGIS。只需点击QGIS文件夹,然后找到可执行文件“qgis.bat”,双击运行即可启动QGIS。请注意,虽然这个版本是免安装的,但你的计算机上仍然需要满足QGIS的运行要求,例如安装了必要的依赖库和驱动程序等。 除了免安装版本,QGIS还提供了其他一些便携式版本,例如OSGeo4W,它可以让你在一个独立的环境中运行QGIS,而无需安装到你的计算机上。 总结来说,QGIS的免安装版本可以通过官方网站下载并解压缩到计算机上,然后直接运行。这种方式可以让你在不同的计算机上使用QGIS,同时也可以方便地携带和分享软件。 ### 回答2: QGIS 3.22.12是一款开源的地理信息系统(GIS)软件,可用于创建、编辑、分析和展示地理空间数据。在免安装版本中,用户无需将软件安装到计算机中,只需将软件文件解压到指定的文件夹即可使用。 使用QGIS 3.22.12免安装版本的步骤如下: 1. 首先,从官方网站(https://www.qgis.org)下载QGIS 3.22.12的免安装版本的压缩包。 2. 找到下载的压缩包文件并解压缩到您希望保存软件的文件夹中。 3. 打开解压后的文件夹,找到文件夹中的可执行文件(通常为“qgis.bat”或“qgis.exe”),双击打开。 4. 一旦打开了QGIS软件,您可以开始使用各种地图、矢量数据和工具。 需要注意的是,由于是免安装版本,QGIS不会直接集成到操作系统中,所以您只需要在需要使用QGIS时打开该软件,而不需要在计算机中进行安装。这也意味着您可以将软件文件夹复制到任何其他位置或设备上,并在那里使用QGIS。 使用QGIS 3.22.12免安装版本,您可以进行各种GIS任务,如地图制作、空间分析、地理定位等。它支持各种各样的数据格式,如矢量数据(如ESRI Shapefile、GeoJSON、KML等)、栅格数据(如GeoTIFF、GRASS等)以及数据库(如PostGIS等)。 总而言之,QGIS 3.22.12的免安装版本提供了一种方便快捷的方式来使用该软件,无需进行复杂的安装步骤,使用户能够轻松地进行地理信息系统分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值