2. QGis二次开发项目实践一之技术实现

前言

  • 本文描述了QGis二次开发项目实践一的涉及到的技术点
  • 涉及到的QGis技术点如下
    • 矢量图层加载显示
    • 矢量图层导出
    • dxf矢量图层合并

代码描述

矢量图层加载显示

  • 矢量图层加载显示在以前的教程中已有详细说明,请参考以下链接
    • 5.1 加载矢量图层(ogr,gpx)
    • 5.2 加载矢量图层(delimitedtext,spatialite,wfs,memory)
    • 4. qgis c++二次开发 map canvas介绍
  • 矢量图层加载也可以参考开源程序QGis C++ API二次开发示例大全
    在这里插入图片描述

矢量图层导出

  • QGis二次开发的库中包含Core、Gui等库,详见文章2. qgis c++ api 整体框架详解)

Core库相关类

  • QgsVectorFileWriter文件见链接

A convenience class for writing vector layers to disk based formats (e.g.Shapefiles, GeoPackage).
There are two possibilities how to use this class:

  1. A static call to QgsVectorFileWriter::writeAsVectorFormat(…) which saves the whole vector layer.
  2. Create an instance of the class and issue calls to addFeature(…).
  • 该类的一个函数writeAsVectorFormatV3()可以将矢量图层保存到磁盘
    /*** Writes a layer out to a vector file.* \param layer source layer to write* \param fileName file name to write to* \param transformContext coordinate transform context* \param options save options* \param newFilename potentially modified file name (output parameter)* \param newLayer potentially modified layer name (output parameter)* \param errorMessage will be set to the error message text, if an error occurs while writing the layer* \returns Error message code, or QgsVectorFileWriter.NoError if the write operation was successful* \since QGIS 3.20*/static QgsVectorFileWriter::WriterError writeAsVectorFormatV3( QgsVectorLayer *layer,const QString &fileName,const QgsCoordinateTransformContext &transformContext,const QgsVectorFileWriter::SaveVectorOptions &options,QString *errorMessage SIP_OUT = nullptr,QString *newFilename SIP_OUT = nullptr,QString *newLayer SIP_OUT = nullptr );
  • 在PyQGIS Cookbook的6.7. Creating Vector Layers章节详细说明了其使用

Gui库相关类

  • QgsVectorLayerSaveAsDialog类详细描述见文档

Class to select destination file, type and CRS for ogr layers.

  • 在本项目中就直接使用了Gui库中的QgsVectorLayerSaveAsDialog类,效果见下图
    在这里插入图片描述

dxf矢量图层合并

  • 矢量图层合并使用了gdal库的命令ogr2ogr

gdal

GDAL is a translator library for raster and vector geospatial data formats that is released under an MIT style Open Source License by the Open Source Geospatial Foundation. As a library, it presents a single raster abstract data model and single vector abstract data model to the calling application for all supported formats. It also comes with a variety of useful command line utilities for data translation and processing.

GDAL(Geospatial Data Abstraction Library)是一个开源的地理空间数据处理库,为读取、写入和处理各种地理空间数据格式提供了广泛的功能支持。它是地理信息系统(GIS)领域中最重要和最常用的开源库之一,被广泛应用于地图制图、遥感影像处理、空间分析和地理空间数据可视化等领域。
GDAL支持数百种栅格和矢量数据格式,如GeoTIFF、ESRI Shapefile、NetCDF等,这使得它成为处理各种地理空间数据的强大工具。此外,GDAL还提供了一系列数据处理功能,如重采样、裁剪、投影转换等,并允许用户在不同的地理空间数据格式之间进行转换。
GDAL的特点在于其跨平台性、开源性和易用性。它可以在多种操作系统上运行,包括Windows、Linux和Mac OS等,并支持多种编程语言,如C/C++、Python、Java、JavaScript等。作为开源项目,GDAL的源代码可供用户自由查看和修改,吸引了大量的开发者和贡献者参与项目的维护和发展。
GDAL中的OGR是其项目的一个分支,主要提供对矢量数据的支持。OGR封装了OpenGIS的矢量数据模型,提供了丰富的几何操作以及空间参考系统的定义等功能。
总的来说,GDAL是一个功能强大的地理空间数据处理库,为GIS领域的研究和应用提供了便捷的数据处理工具。无论是进行空间分析、数据可视化还是构建GIS系统,GDAL都是一个不可或缺的库。

在QGIS中,GDAL/OGR库被用作后端的数据处理引擎,使QGIS能够读取、写入和处理多种栅格和矢量数据格式。这种集成使得QGIS成为一个功能强大的GIS工具,能够处理各种地理空间数据,并为用户提供丰富的空间分析功能。

合并功能实现

在这里插入图片描述

  • ogr2ogr功能很多,这里只用到了两项功能
  1. 首先将.dxf文件转换为追加至all.geojson
ogr2ogr.exe -append -f geojson all.geojson 1.dxf
ogr2ogr.exe -append -f geojson all.geojson 2.dxf
  1. 然后将all.geojson文件转换为.dxf
ogr2ogr.exe -f dxf all.dxf all.geojson
  • 这样就完成了将dxf文件不同类型的图层合并为一个dxf文件的功能

总结

  • 分别介绍了矢量图层加载显示,矢量图层导出和dxf矢量图层合并功能的技术实现

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

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

相关文章

【微服务】使用kubekey部署k8s多节点及kubesphere

kubesphere官方部署文档 https://github.com/kubesphere/kubesphere/blob/master/README_zh.md kubuctl命令文档 https://kubernetes.io/zh-cn/docs/reference/kubectl/ k8s资源类型 https://kubernetes.io/zh-cn/docs/reference/kubectl/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E…

python中的函数概念

一段可以被重复使用的代码。 关于函数的定义 defdefine (定义) def 函数名(形参列表):形参列表中,可以有多个形参,多个形参之间使用逗号分隔, 关于函数的调用 (开始完…

Transformer 论文重点

摘要 提出了一个 Transformer 模型,针对于一个机器翻译的小任务上表现结果比当时所有模型的效果都好,并且架构相比其它更加简单,后面就火到了发现什么方向都能用的地步。 介绍 循环神经网络,特别是长短时记忆[ 13 ]和门控循环[…

kafka-消费者-指定offset消费(SpringBoot整合Kafka)

文章目录 1、指定offset消费1.1、创建消费者监听器‘1.2、application.yml配置1.3、使用 Java代码 创建 主题 my_topic1 并建立3个分区并给每个分区建立3个副本1.4、创建生产者发送消息1.4.1、分区0中的数据 1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1…

nginx动静分离和反向代理

一、动静分离 动静分离指的是将动态内容和静态内容分开处理。动态内容通常由后端应用程序生成,例如PHP、Python或Node.js,静态内容则包括图片、CSS、JavaScript等文件。 例子: #代理服务器一 server{listen 80;server_name www.dj.com;r…

夏季高温来袭|危化品如何安全储存?

《危险化学品安全管理条例》第三条 本条例所称危险化学品,是指具有毒害、腐蚀、爆炸、燃烧、助燃等性质,对人体、设施、环境具有危害的剧毒化学品和其他化学品。 随着夏天高温的来袭,炎热的天气对危化品储存威胁巨大,危化品事故也…

【C++课程学习】:C++入门(输入输出,缺省参数)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🍩1.关于C输入输出: 🍩2.缺省参数函数: 缺省参数的概…

聊聊大模型微调训练全流程的思考

前言 参考现有的中文医疗模型:MedicalGPT、CareGPT等领域模型的训练流程,结合ChatGPT的训练流程,总结如下: 在预训练阶段,模型会从大量无标注文本数据集中学习领域/通用知识;其次使用{有监督微调}(SFT)优化…

TensorBoard在pytorch训练过程中如何使用,及数据读取问题解决方法

TensorBoard 模块导入日志记录文件的创建训练中如何写入数据如何提取保存的数据调用TensorBoard面板可能会遇到的问题 模块导入 首先从torch中导入tensorboard的SummaryWriter日志记录模块 from torch.utils.tensorboard import SummaryWriter然后导入要用到的os库&#xff0…

方案设计|汽车轮胎数显胎压计方案

一、引言 数显轮胎胎压计是一个专门测量车辆轮胎气压的工具,它具有高精度测量的功能,能够帮助快速准确获取轮胎气压正确数值,保证轮胎使用安全。本文将对数显轮胎胎压计的方案技术进行分析,包括其基本原理、硬件构成、软件设计等方…

架构学习:什么是业务架构图?如何画业务架构图?

6.1~6.18,艾威618年中大促,钜惠来袭!想报课但还没下手的小伙伴,都可以行动起来啦!活动规则还是一如既往的简单、粗暴——直接立减、返现、抽奖以及送礼品!了解活动详情,请点击这里》》 业务架构…

实验9 浮动静态路由配置

--名称-- 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 浮动静态路由也是一种特殊的静态路由,主要考虑链路冗余。浮动静态路由通过配置一条比主路由优先级低的静态路由,用于保证在主路由失效的情况下,…

代码随想录 day27|day28|day29

回溯2 切割问题:是在每个节点判断是否是要剪枝收割元素。 startidx 是切割起点,i是本次切割终点 分割回文串 复原ip地址 非递减子序列 都是在树的节点依照题意判断,之后决定是否剪枝。 也就是都有if判断来剪枝 。 下面是非递减子序列。 下…

前端将xlsx转成json

第一种方式,用js方式 1.1先安装插件 万事都离不开插件的支持首先要安装两个插件 1.2. 安装xlsx cnpm install xlsx --save注:这块我用的cnpm,原生的是npm,因为镜像的问题安装了cnpm,至于怎么装网上一搜一大堆 1.3安…

用langchain搭配最新模型ollama打造属于自己的gpt

langchain 前段时间去玩了一下langchain,熟悉了一下大模型的基本概念,使用等。前段时间meta的ollama模型发布了3.0,感觉还是比较强大的,在了解过后,自己去用前后端代码,调用ollama模型搭建了一个本地的gpt应用。 核心逻辑 开始搭…

Vue 封装elementUI的el-popover

1.封装公共组件 <template><div class"confirm-popover disInlineBlock ml10"><el-popover placement"bottom" v-model"visible" :trigger"triggerType"><div class"confirm-popover-popover"><…

vue3中进度条上加高亮圆点

实现效果 小圆点基于进度条定位&#xff08;left&#xff09;。 实现代码 <template><!-- 这块代码实现的功能&#xff1a;progressData遍历的年份进度数组&#xff0c;展示每年完成的进度--><ul><li v-for"(item, index) in progressData" :k…

Unity VR 零基础开发之 Pico4 MR

一、新建Unity2021.3.37 3D工程 二、切换到Android安卓平台 1、点击Unity编辑器左上角的Flie后&#xff0c;选择Build Setting选项。 2、弹出弹窗后&#xff0c;点击Android选项&#xff0c;然后再点击Switch Platform按钮切换成安卓平台。 3、切换完成后Android选项后面会显示…

3. QGis二次开发项目实践一之解决“无法定位程序输入点“

前言 本章讲述实现本项目实现过程中遇到的QGis二次开发库版本和Qt以及其他动态库的版本匹配问题问题复现 本项目是要作为一个子模块集成到用户的项目中本项目最初的开发环境为QGis3.28+Qt5.15.2,而当时并未问清楚用户开发环境所以交付给用户之后,出现了类似下图的问题 出现该…

AI论文:一键生成论文的高效工具

说到这个问题&#xff0c;那真的得看你对“靠谱”的定义是怎样的啦&#xff1f; 众所周知&#xff0c;写论文是一项极其耗时间的事情&#xff0c;从开始的选题到文献资料搜索查阅&#xff0c;大纲整理等等一大堆的繁杂工作是极艰辛的。用AI写论文就不一样了&#xff0c;自动化…