qt中使用QGIS实现二次开发导入shp格式地图(MSVC2019_64bit+qt5.15+qgis)

news2024/11/18 3:44:51

在qt开发过程中可能要导入自定义格式的图层地图,那么可以把这些数据导入qgis然后导出为shp格式文件,然后下载qgis源码,在qt项目中配置环境变量导入qgis有关的头文件,然后再引入shp数据格式的地图。

qgis处理数据

QGIS安装

QGIS安装

QGIS导入数据

在这里插入图片描述
然后保存点击Layer->save as导出为shp格式文件
在这里插入图片描述

QT中的QGIS二次开发(编译的是release版本的)

参考QtCreator进行QGis二次开发(1)

QGIS源码包的安装我是参考VS2019+QT5.15.2+QGIS二次开发环境搭建里面安装QGIS的方法来的。安装好了之后,只创建了一个pro文件和一个cpp文件。

程序

  • main.cpp
#include <QMainWindow>
#include <qgsapplication.h>
#include "qgsproject.h"
#include <QMainWindow>
#include <QFileDialog>
#include <QMessageBox>
#include <QGridLayout>
//QGIS
#include "qgsproject.h"
#include <qgsmaptooldigitizefeature.h>
#include <qgsadvanceddigitizingdockwidget.h>
#include <qgssymbol.h>
#include <qgsmessagebar.h>
//QGIS include
#include "qgsmapcanvas.h"
#include "qgsmaplayer.h"
#include  <qgsmaptoolcapture.h>
#include<QMouseEvent>
#include <QMainWindow>
int main(int argc, char *argv[])
{
    QgsApplication app(argc, argv, true);
    QgsApplication::initQgis();

    // 加载.shp文件,地址为shp格式文件存放地址
    QString filePath = "C:/xxx/xxx.shp";
    QgsVectorLayer* layer = new QgsVectorLayer(filePath, "Layer Name", "ogr");

    if (!layer->isValid())
    {
        qDebug() <<"error";
        return -1;
    }

    // 添加图层到地图窗口
    QgsProject::instance()->addMapLayer(layer);

    // 显示地图窗口
    QgsMapCanvas* canvas = new QgsMapCanvas();
    canvas->setCanvasColor(QColor(255, 255, 255));
    canvas->setExtent(layer->extent());
    canvas->enableAntiAliasing(true);
    //canvas->setMapUnits(QgsUnitTypes::Meters);
    canvas->setLayers(QgsProject::instance()->mapLayers().values());
    canvas->show();

    // 进入Qt事件循环
    return app.exec();
}
  • .pro
QT       += core gui xml

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += _USE_MATH_DEFINES
# 这里需要改成你的OSGeo4W的地址
SOURCES += \
    main.cpp
INCLUDEPATH += "D:\OSGeo4W\include"
INCLUDEPATH +="D:\OSGeo4W\apps\qgis-ltr\include"
INCLUDEPATH +="D:\OSGeo4W\apps\Qt5\include"
LIBS += -L"D:\OSGeo4W\apps\qgis-ltr\lib" -lqgis_core -lqgis_gui

unix{
DEFINES += CORE_EXPORT=
DEFINES += GUI_EXPORT=
}
!unix{
DEFINES += CORE_EXPORT=__declspec(dllimport)
DEFINES += GUI_EXPORT=__declspec(dllimport)
}
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

环境配置

项目->Build Enviroment中

INCLUDE

在这里插入图片描述

LIB

在这里插入图片描述

Path

在这里插入图片描述

PROJ_LIB

新增一个变量叫做PROJ_LIB
在这里插入图片描述

拷贝dll等相关库文件

这一步非常重要!
在用release版本的编译之后,会出现一个编译的目录,叫做buid-xxx(你的项目名称)-Desktop_Qt_5_15_2_MSVC2019_64bit-Release,里面有一个文件夹release,进入这个文件夹,我们暂时把这个文件夹里面叫做exe目录

我的OSGeo4W源码包安装在D盘

  1. 拷贝D:\OSGeo4W\apps\Qt5\bin 目录下全部dll到exe目录下。大约300多MB。QT相关库。
  2. 拷贝D:\OSGeo4W\apps\Qt5\plugins 目录下的platforms目录到 exe目录下plugins目录里。Qt插件库。
  3. 拷贝D:\OSGeo4W\apps\qgis-ltr\bin 目录下全部文件考到exe目录下。Qgis相关库
  4. 拷贝D:\OSGeo4W\bin 目录下全部dll文件和gdalplugins目录考到exe目录下。GDAL、OSGEO相关库。

如何找到gdalplugins,在文件夹右上角搜索 。选择其中一个。
在这里插入图片描述

  1. 把D:\OSGeo4W\apps\qgis-ltr\plugins目录下全部文件考到exe同级plugins目录下,该目录下的dll是各种文件的驱动程序,如果缺少则无法打开文件。Qgis插件库。
  2. 拷贝D:\OSGeo4W\apps\gdal\share中gdal目录到exe同级的share目录下。这个目录包含了GDAL_DATA中的辅助文件,在代码中需要注册GDAL_DATA的环境变量到这个目录。
  3. 在exe目录下新建一个qt.conf文件,填写如下内容在这里插入图片描述
  4. 上面配置好了以后,在Release模式下重新生成exe
  5. 运行exe,然后就可以看到窗口了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle数据库当中用户的创建,添加,授权,以及表的创建与表的简单介绍,以及在oracle数据库当中的约束以及约束条件的简单介绍

系列文章目录 (3条消息) oracle数据库简介 文章目录 系列文章目录 前言 一、用户的创建 1.1、创建命令 1.2、给予scott用户权限 1.3、以scott用户进行连接登录 二、表和表的设计原则 2.1、表的概念 2.1.1、表是从属于用户的 2.1.2、表是逻辑表(概念表)&#xff0c;不…

[比赛简介]Predict Student Performance from Game Play

比赛链接&#xff1a;https://www.kaggle.com/competitions/predict-student-performance-from-game-play/overview 比赛简介 本次比赛的目标是实时预测学生在基于游戏的学习中的表现。您将开发一个在最大的游戏日志开放数据集之一上训练的模型。 您的工作将有助于推进对基于…

Next.js ---未完待续....

Next.js 1.介绍2.体会服务器端渲染2.1为什么这就服务器端渲染了&#xff1f; 3.如何判断是否是服务器端渲染&#xff1f;--- 响应头信息4.文件名路由5.如何启动项目*另外1.Next.js 是基于 Webpack 的框架&#xff1f;1.1所以无需手动编译 TypeScript 代码 1.介绍 Next.js 是一…

【C++】C++泛型编程 | 模板初阶

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;C &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#xff0c;专注C/C/GO的干货分…

LT8711UXE1,Type-C/DP1.2 转 HDMI2.0,内置HDCP,支持4k 60Hz向下兼容

1. 描述 LT8711UXE1 是一款高性能 Type-C/DP1.2 至 HDMI2.0 转换器&#xff0c;设计用于将 USB Type-C 源或 DP1.2 源连接到 HDMI2.0 接收器。LT8711UXE1 集成了一个符合 DP1.2 标准的接收器和一个符合 HDMI2.0 标准的发射器。此外&#xff0c;还包括两个用于 CC 通信的 CC 控…

研发/IT工程师双视角测评8大仿真平台,结果……

上一篇&#xff0c;我们围绕着亿万研发工程师的梦想&#xff0c;考察了市面上几乎所有类型的工业仿真平台&#xff0c;深度评测了他们本质究竟是什么&#xff0c;适用场景有哪些&#xff0c;分别能给研发和IT工程师们减轻多少工作量。 据此&#xff0c;我们搭建了一个工业仿真…

C++/PTA 神坛

C/PTA 神坛 题目要求解题前提及思路凹包算法概念步骤 解题思路 代码tan(y/x)及tan2(y,x)函数 总结 题目要求 在古老的迈瑞城&#xff0c;巍然屹立着 n 块神石。长老们商议&#xff0c;选取 3 块神石围成一个神坛。因为神坛的能量强度与它的面积成反比&#xff0c;因此神坛的面…

记录:自回归 模型在记忆 全随机序列 的潜变量 统计量爆炸现象

只是一个记录 8层12头512维度的 GPT 模型&#xff0c;使用它来记忆 10000 条 512长度 的无序序列&#xff0c;vocab_size 为100。 模型要自回归生成这些序列&#xff0c;不可能依赖局部推理&#xff0c;必须依赖全局视野&#xff0c;即记住前面的序列。 然后统计 最后一个no…

HF宣布在transformers库中引入首个RNN模型:RWKV,一个结合了RNN与Transformer双重优点的模型

RWKV是一个结合了RNN与Transformer双重优点的模型架构。由香港大学物理系毕业的彭博首次提出。简单来说&#xff0c;RWKV是一个RNN架构的模型&#xff0c;但是可以像transformer一样高效训练。今天&#xff0c;HuggingFace官方宣布在transformers库中首次引入RNN这样的模型&…

QGC局域网内连接PX4模拟器JMAVSim

环境 QGroundControl 开源地面站系统; 代码地址: https://github.com/mavlink/qgroundcontrolPX4 开源飞控系统; 代码地址: https://github.com/PX4/PX4-Autopilot QGC可以直接下载运行包. PX4 请根据代码中的说明,进行环境的配置和运行. 通过代码去build地面站和PX4的步骤见官…

【Linux 之五】 Linux中使用fdisk命令实现磁盘分区

最近由于工作的需要&#xff0c;初步研究了uboot中的fastboot实现方式。研究fastboot不可避免的需要了解磁盘分区的相关知识点&#xff0c;在linux下可以使用fdisk命令实现磁盘的分区。好了&#xff0c;下面步入正题。 1. 查看帮助信息&#xff08;fdisk --help&#xff09; …

计算机网络 - 传输层

Transport-Layer Services Transport layer, 传输层主要是完成进程(proces)到进程(process)之间的通讯的. 在传输层之下的IP协议, 提供的是best-effort的传输, 也就是对信息的正确性没有保证, 也就是IP的协议是unreliable的, TCP的协议是在IP协议至少提供可靠的数据传输. UDP…

Word批量更改图片环绕方式与=尺寸大小

前提&#xff1a;一份Word文档里面有100张图片&#xff0c;有大有小&#xff0c;需要将100张图片更改为统一大小&#xff0c;宽度与高度均为5厘米&#xff0c;同时环绕方式也需要改成四周型。 默认Word图片的默认环绕方式为嵌入型&#xff0c;需要统一更改为四周型&#xff0c;…

多元时间序列 | RBF径向基神经网络多变量时间序列预测(Matlab完整程序)

多元时间序列 | RBF径向基神经网络多变量时间序列预测(Matlab完整程序) 目录 多元时间序列 | RBF径向基神经网络多变量时间序列预测(Matlab完整程序)预测结果评价指标基本介绍程序设计参考资料预测结果 评价指标 训练集数据的R2为:0.99805 测试集数据的R2为:0.98351 训练…

二叉树最大宽度_深度优先方式_20230520

二叉树最大宽度_深度优先方式_20230520 前言 给定一颗二叉树&#xff0c;求解其最大宽度。定义每层宽度为该层最左和最右之间的长度&#xff0c;也即左右两个端点之间的所跨越的长度&#xff0c;两个端点直接可能会包含一些延伸到本层的空节点&#xff0c;这些空节点的长度由…

【小沐学NLP】Python实现聊天机器人(OpenAI,模型概述笔记)

&#x1f37a;NLP开发系列相关文章编写如下&#x1f37a;&#xff1a;1&#x1f388;【小沐学NLP】Python实现词云图&#x1f388;2&#x1f388;【小沐学NLP】Python实现图片文字识别&#x1f388;3&#x1f388;【小沐学NLP】Python实现中文、英文分词&#x1f388;4&#x1…

Springcloud1----->Hystrix

目录 雪崩问题服务降级原理实践order降级处理user降级处理 服务熔断原理实践 hystrix&#xff0c;英文意思是豪猪&#xff0c;全是是刺&#xff0c;一种保护机制&#xff0c;即熔断器。 主页&#xff1a;https://github.com/Netflix/Hystrix/ 雪崩问题 在微服务中&#xff0c;…

selenium自动化测试报告_selenium自动化测试断言

一、元素操作方法 方法&#xff1a; 1、.send_keys() # 输入方法 2、.click() # 点击方法 3、.clear() # 清空方法 复制 注意&#xff1a;在输入方法之前一定要清空操作!! # 导包 from time import sleep from selenium import webdriver# 实例化浏览器 driver webdriver…

这才是自动化测试,资深测试构建持续交付体系(高质量)持续集成...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件测试-自动化测…