Qt Quick-QML地图引擎之v4版本(新增3D模型/抗锯齿任意多边形下载)

news2024/11/23 16:53:21

在上个版本Qt quick-QML地图引擎之v4版本(新增3D模型/高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)_qt 高德地图离线_诺谦的博客-CSDN博客更新了很多小功能。经过朋友们一致需求建议,所以V4继续优化。

 

B站视频: Qt Quick-QML地图引擎之v4版本(新增3D模型/抗锯齿下载优化)_哔哩哔哩_bilibili

GIF如下所示: 

1.新增ArcGIS街道(蓝黑)-在线和离线下载

2.多边形下载-抗锯齿

V3旧版本裁剪后的如下图所示:

V4版本裁剪后的如下图所示:

增加抗锯齿后,裁剪明显没有锯齿了。

3.3D模型

但是由于Qt地图常常用于嵌入式系统,或者就是无人机系统,需要实时展示物体/飞行器实时姿态和经纬度,由于市面上QT的大部分都是2D物体模拟,比如:

所以V4增加3D模型实现,这样就可以显示具体的姿态信息,这样更加地直观,欧拉角姿态如下图所示:

截图如下所示:

支持各种倾斜、旋转、纠正视角:

 支持跨平台、Linux/嵌入式/mac一键编译:

也可以支持显示四轴无人机、雷达等等各种3D模型、

由于本人没有实际设备获取,所以数据通过轨迹线模拟生成的,模拟代码如下所示:

    // 启动导航 list<coordinate>
    function startNavigator(pathData) {
        editEnable = false
        navigationLine.path = []  
        navigationTimer.path = pathData
        navigationTimer.currentIdx = 0
        navigationTimer.initializedData(true);
        navigationTimer.restart()
        navigatorHintPopup.open();      // 提示
    }

    Timer {
        id: navigationTimer
        interval: 200
        running: false
        repeat: true

        property var path           // 路径
        property int currentIdx     // 当前到哪个路径
        property real arc           // 弧点
        property var end            // 结束点
        property var begin          // 起始点
        property var current        // 当前点
        property int currentStepCnt: 0

        property real longStep      // 步数
        property real latStep

        property bool longAdd       // 增减关系
        property bool latAdd

        onTriggered: {

            currentStepCnt+=1

            current.latitude = currentStepCnt*latStep + navigationTimer.begin.latitude
            current.longitude = currentStepCnt*longStep + navigationTimer.begin.longitude
 

            let intervalY = latAdd ? current.latitude - end.latitude : end.latitude - current.latitude;
            let intervalX = longAdd ? current.longitude - end.longitude : end.longitude - current.longitude;
  
            if(intervalX>0 || intervalY>0) {
                target.center = end
                current = end

                navigation3DModel.nextCoordinate(current)
                navigationLine.replaceCoordinate(currentIdx,current)

                if((currentIdx+1) >= navigationTimer.path.length) {
                    navigationTimer.stop();
                    navigatorHintPopup.close();    
                    editEnable = true
                } else {
                    initializedData(); 
                    let less = Math.sqrt(Math.pow(intervalY,2) + Math.pow(intervalX,2))

                    navigationTimer.begin.longitude += less * Math.cos(navigationTimer.arc)
                    navigationTimer.begin.latitude += less * Math.sin(navigationTimer.arc)
                    navigation3DModel.nextCoordinate(navigationTimer.begin)

                }

            } else {
                target.center = current
                navigation3DModel.nextCoordinate(current)

                if(navigation3DModel.visible)
                  navigationLine.replaceCoordinate(currentIdx, navigation3DModel.coordinate)
            }
        }

        // 初始化数据
        function initializedData(first = false) {

            navigationTimer.begin = navigationTimer.path[currentIdx];
            let end = navigationTimer.path[currentIdx+1];

            let arc = Math.atan2((end.latitude - navigationTimer.begin.latitude), (end.longitude - navigationTimer.begin.longitude));

            navigationTimer.longStep = navigatorSpeed * Math.cos(arc)
            navigationTimer.latStep = navigatorSpeed * Math.sin(arc)

            navigationTimer.longAdd =  navigationTimer.longStep > 0 ? true : false
            navigationTimer.latAdd =  navigationTimer.latStep > 0 ? true : false

            navigationTimer.currentStepCnt = 0

            console.log("开始导航", currentIdx, end.longitude , end.latitude , begin.longitude, begin.latitude)

            navigationTimer.current = navigationTimer.begin
            navigationTimer.end = end
            navigationTimer.arc = arc
            if(currentIdx == 0) navigationLine.addCoordinate(navigationTimer.begin)          
            navigationLine.addCoordinate(navigationTimer.begin)

            navigation3DModel.initCoordinate(navigationTimer.begin, end, first)

            currentIdx += 1
            navigatorHintPopup.label = `路径点${currentIdx}->路径点${currentIdx+1} 正在导航中...`;      // 提示

        }
    }

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

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

相关文章

【办公效率提升】Window10与ubuntu递归列出当前目录及其所有子目录中的文件和文件夹

在Windows操作系统中&#xff0c;没有内置的类似于Ubuntu的"tree"命令的功能。但是&#xff0c;你可以使用以下两种方法来实现相似的功能&#xff1a; 方法一&#xff1a;使用dir命令和递归 你可以使用Windows的内置命令"dir"以及递归参数"/s"来…

前后端交互二、form表单与模板引擎

零、文章目录 前后端交互二、form表单与模板引擎 1、form表单的基本使用 HTML相关知识请参考HTML入门 &#xff08;1&#xff09;表单是什么 表单在网页中主要负责数据采集功能。HTML中的<form>标签&#xff0c;就是用于采集用户输入的信息的&#xff0c;并通过<…

linux PerfCollect收集日志及perfview分析

Perfview&#xff1a;https://github.com/Microsoft/perfview/releases PerfCollect&#xff1a;https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/linux-performance-tracing.md Linux 环境中运行的 ASP.NET Core应用中收集跟踪 PerfCollect&#…

5.6.1 Ext JS之标签页的关闭和批零关闭

Tab Panel 是包含多个标签页的面板, 这是一种很常用的组件, 类似于浏览器的标签页。关于 Ext JS的Tab Panel的基本使用可以参考: [Ext JS3.9] 标签面板(TabPanel )介绍与开发, 本篇介绍如何关闭单个标签页和批量关闭标签页。 Tab 标签页的可关闭 默认状况下,标签页是无…

Bitmiracle Docotic.Pdf 9.015 Crack

Docotic.Pdf 库是正确的法语和强大的编程和界面&#xff0c;可以让用户和开发人员创建专业和高质量的 PDF 文件&#xff0c;甚至可以阅读和修改那些已经存在的。它具有干净而强大的编程接口&#xff0c;能够帮助用户创建质量非常好的 PDF 文档。在这个库的帮助下&#xff0c;用…

linux log

linux log 一:printk日志级别二:printk打印消息控制printkprintk消息等级查看与修改/etc/rsyslog.conf 一:printk日志级别 数字越小级别越高 二:printk打印消息控制 console_loglevel&#xff1a;只有当printk打印消息的log优先级高于console_loglevel时&#xff0c;才能输出…

C++编译一些常见的错误集锦

目录 1、段错误&#xff08;Segmentation Fault&#xff09; 2、强异常保证&#xff08;strong exception guarantee&#xff09; 3、有效但未定义的状态&#xff08;valid but unspecified state&#xff09; 1、段错误&#xff08;Segmentation Fault&#xff09; &#…

Material—— VAT(Houdini To UE)

目录 一&#xff0c;介绍 二&#xff0c;柔体 二&#xff0c;刚体 一&#xff0c;介绍 VAT是将动画数据存储在纹理中&#xff0c;通过GPU运算来实现动画的技术&#xff1b;VAT纹理包含每个顶点在不同帧的位置信息&#xff0c;而每个像素代表一个顶点在某个时间点的位置&…

Linux项目流程 + 用git将本地代码上传到gitee

目录 前言 一个"进度条"项目 git上传代码 首次上传代码 安装git 克隆仓库连接 将文件传入路径目录 文件上传三板斧 后续提交更新 git实用用法补充 前言 本文将介绍如何使用makefile编写项目并将其上传到git远程仓库。Makefile是一种用于自动化构建、编译…

Python爬虫:从后端分析为什么你爬虫爬取不到数据

仅仅是小编总结的三点而已&#xff0c;可能不是很全面&#xff0c;如果之后小编了解到新的知识点&#xff0c;可能还会增加的哈&#xff01; 1. 最简单的爬虫代码 也就是各位最常使用的&#xff0c;直接利用requests模块访问当前网站链接&#xff0c;利用相关解析模块从而获取…

第三届陕西省大学生网络安全技能大赛wp

文章目录 第三届陕西省大学生网络安全技能大赛wpwebezpoptestezrceunserializeEsc4pe_T0_Mong0 misc管道可是雪啊飘进双眼 第三届陕西省大学生网络安全技能大赛wp web ezpop 在源码找到base64 解码&#xff1a; /pop3ZTgMw.php&#xff0c;访问获得源码&#xff1a; <?…

通过帮助中心提高客户满意度,帮助中心的最佳实践方式

随着技术的不断发展和产品的不断更新&#xff0c;消费者对产品的需求也越来越高。在这个竞争激烈的市场中&#xff0c;企业必须建立一个完善的帮助中心&#xff0c;来提供及时、准确的技术支持和解决方案&#xff0c;以满足客户的各种需求。这样能够有效地提高客户满意度&#…

java+springboot8高校教职工教师档案管理系统

系统设计遵循界面层、业务逻辑层和数据访问层的Web开发三层架构。采用B/S结构,使得系统更加容易维护。系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理用户表模块、token表模块、公告信息模块、教职工模块、工资信息模块、调动离职模块、配置文件模块、出勤信息模…

好用工具第3期:全平台免费音乐LxMusic

LxMusic 1. 概要 LxMusic 是一个跨平台的开源的音乐播放器。支持本地音乐文件播放以及各大平台的音乐搜索播放和下载所有歌曲。 LxMusic 是一个开源项目, 项目地址是: 桌面端 https://github.com/lyswhut/lx-music-desktop 移动端 https://github.com/lyswhut/lx-music-mobi…

Ficus 第二弹,突破限制器的 Markdown 编辑管理软件!

大家好&#xff0c;我们是 ggG 团队&#xff0c;我们开发的 markdown 笔记管理软件 Ficus Beta 版本正式发布了。详情可以见我们官网&#xff0c;也可以来我们仓库查看。 相对于 Alpha 版本&#xff08;可以在我们之前的博客中查看&#xff09;&#xff0c;主要有 3 点明显的提…

【网络】协议定制+序列化/反序列化

为什么要序列化&#xff1f; 如果光看定义很难理解序列化的意义&#xff0c;那么我们可以从另一个角度来推导出什么是序列化, 那么究竟序列化的目的是什么&#xff1f; 其实序列化最终的目的是为了对象可以跨平台存储&#xff0c;和进行网络传输。而我们进行跨平台存储和网络…

[第一章 web入门]常见的搜集

首先就利用御剑或者dirsearch扫描一下网站后台&#xff0c;可以得到以下三个路径返回正常 robots.txt index.php~ .index.php.swp 其实我没扫描出来&#xff0c;这些都是看的别人的wp才做出来的&#xff0c;一开始我其实意识到御剑其实就是有一个字典&#xff0c;然后按照字典的…

【蓝桥杯算法题】用java遍写税收计算

【蓝桥杯算法题】用java遍写税收计算 题目&#xff1a;劳务报酬税收计算&#xff1a;输入 m &#xff0c;输出税后收入。如果 m <800&#xff0c;不扣税&#xff0c; 如果800< m <4000&#xff0e;则 m 减去800后的金额扣除20&#xff05;所得税。如果 m >4000&…

SpringBoot项目使用CXF框架开发Soap通信接口

SpringBoot项目使用CXF框架开发Soap通信接口 物料准备&#xff1a; 1.引入cxf官方提供的SpringBootStarter依赖 2.定义需要暴雷给外部调用的java接口以及接口的实现类 3.配置CxfConfig类&#xff0c;把你定义的java接口注册为webservice的Endpoint 引入cxf-spring-boot-st…