Qt quick-QML地图引擎之v3版本(新增高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)
在上个版本64.qt quick-qml使用高德地图插件实现V2版本(新增:位置搜索、路径规划、轨迹编辑等)_诺谦的博客-CSDN博客_qt高德地图插件基础下新增以下功能:
1、支持多线程请求、超时重试、软件重启续传功能、支持多个任务并行下载
2、自己实现的裁剪算法,实现地图任意多边形及任意顺时针逆时针裁剪、
3、离线加载地图并预览、并支持在原来支持的图层上再次放大
4、实现多个图层下载融合(比如高德卫星+标记)
5、实现区域查询,区域下载
6、自定义皮肤
7、跨平台、支持 Windows(mingw, msvc) Linux(桌面、嵌入式 ) 安卓等,不仅支持QML加载、也支持QWidget加载
体验地址
链接:https://pan.baidu.com/s/1PzJVZhyrzJbBoQrZCnUuvw?pwd=d836?
文件名:诺谦-地图引擎下载器v3试用版(支持跨平台,离线,在线,多任务下载,轨迹,标记等)
提取码:d836
b站演示传送门
Qt quick-QML地图引擎之v3版本(新增高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)_哔哩哔哩_bilibili
整体界面如下所示:
支持以下在线地图:
支持不同皮肤样式:
支持任意裁剪(五角星当时多放了一个点,没对称):
1.支持跨平台
如下图所示,以linux为例,同一套代码直接就编译完成!,为跨平台节省了一大半时间,只要下载管理写的好,就一切没问题
2.离线地图支持再次任意放大
如下图所示,原本下载的20级谷歌地图可以放大到22:
3.裁剪实现
使用接口方式,子类实现了两套不同算法提供给父类调用,矩形裁剪由于是对称的,所以效率最快,而多边形裁剪需要计算每个边.
// 多边形剪切 存储
class MapTileSaveTaskPolygonTailor : public MapTileSaveTask
{
protected:SolveType solve() override;void paint(QPainter *p) override;public:MapTileSaveTaskPolygonTailor(const QList<QByteArray>& data,const QString& outputDir,const TileSpec& tile, const bool& isClip, const QVector<QPoint>& polygon):MapTileSaveTask(PolygonTailor, data, outputDir, tile, isClip){if(_isClip) {_tailorPolygon.resize(polygon.size());for(int i = 0 ; i < _tailorPolygon.length(); ++i) {_tailorPolygon[i].rx() = polygon[i].x() - tile.offsetX * 256;_tailorPolygon[i].ry() = polygon[i].y() - tile.offsetY * 256;// 目前算法实现边检测,未实现裁剪区域顶点与瓦片边缘重合情况(相对效率提高)if((_tailorPolygon[i].ry() == 0 || _tailorPolygon[i].ry() == 256)&& _tailorPolygon[i].rx() >= 0 && _tailorPolygon[i].rx() <=256 ) {_tailorPolygon[i].ry() -=1;}if((_tailorPolygon[i].rx() == 0 || _tailorPolygon[i].rx() == 256)&& _tailorPolygon[i].ry() >= -1 && _tailorPolygon[i].ry() <=256 ) {_tailorPolygon[i].rx() -=1;}}// 精度丢失,避免重复点for(int i = 1 ; i < _tailorPolygon.length(); ) {if(_tailorPolygon[i-1] == _tailorPolygon[i]) {_tailorPolygon.remove(i);} else {i++;}}}}private:QVector<QPoint> _tailorPolygon;QVector<QVector<QPoint>> _result;};// 矩形剪切 存储
class MapTileSaveTaskRectangeTailor : public MapTileSaveTask
{
protected:SolveType solve() override;void paint(QPainter *p) override;public:MapTileSaveTaskRectangeTailor(const QList<QByteArray>& data ,const QString& outputDir,const TileSpec& tile, const bool& isClip, const QRect& tailorRect):MapTileSaveTask(RectangeTailor, data, outputDir, tile, isClip){if(_isClip) {_tailorRect = QRect(tailorRect.x() - tile.offsetX * 256, tailorRect.y() - tile.offsetY * 256, tailorRect.width(), tailorRect.height());}}private:QRect _tailorRect;QRect _result;
};
4.多边形裁剪流程如下所示
找到所有交点,下图所示:
通过规律可以看出如果主多边形与裁剪多边形有交点,交点成对出现,然后我们可以将相交点规定为进点和出点(enter和exit)、然后找到所有的近点和出点相交点.如下图所示:
制作两个列表:
一个是裁剪多边形(VWXYZ),一个主多边形(ABCD):
找到第一个进点:
从裁剪多边形的列表(VWXYZ)开始,找到第一个进点为i1,然后我们就可以开始在ABCD区域绘制子方形,直到遇到第一个出点i2(出点代表另一个列表的入点).然后再次在ABCD列表中从i2开始,直到绘制到开始点i1为止(避免被漏掉).
然后继续往后遍历,得到:
最后将获取到的裁剪区域对瓦片进行裁剪即可~
最新更新(多折线/区域下载 支持添加额外点):
数据点支持一键导出功能:
增加标记、增加导入国内国外坐标转换、标记坐标值支持复制到剪贴板:
2023/03/02增加测距功能
通过"经度,纬度"定位地图中心点 :
Qt quick-QML地图引擎之v3版本(新增高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)相关推荐
- Qt Quick Qml 之QML与C++ 混合编程学习
<QML与C++ 混合编程学习> 1. 在 QML 中使用 C++ 类和对象 1) C++ 类的修改 2) 注册 QML 类型 3) 在 QML 中导入类型 4) 在 QML 创建由 C+ ...
- Qt Quick QML实现自定义虚拟软键盘详解
Qt Quick QML实现自定义虚拟软键盘详解 在Qt5.8版本推出的QML软键盘功能中,有两种实现方案.一种是基于中文汉字数据库,另一种是基于Google拼音输入引擎.然而,相比于官方软键盘,这两 ...
- Qt Quick QML 实例之疯狂数字游戏(QML C++混合编程、翻译、QSetting )【建议收藏】
文章目录 一.开门见山 二.最基本的框架(v0.1) 1. 后端数据处理 2. 导出 C++ 对象的 QML 的属性 3. 前台 UI 数据 三.完善执行逻辑(v0.2) 四.发布版本(v1.0) 1 ...
- QT Quick QML 实例之 Popup 弹出界面
QT Quick QML 实例之 Popup 弹出界面 一.演示 二.实现过程 1. 居中弹出 2. 正下方弹出 所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧! GIT工程文件 ...
- QT Quick Qml 实例——滑块拖动颜色框的平移(Gradient、drag、clip、transform、antialiasing)
<实例--滑块拖动颜色框的平移> 1. 简介 2. 详解 所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧! QML其它文章请点击这里: QT QUICK QM ...
- 虚幻引擎5.1版本新增功能
虚幻引擎5.1版本新增功能 虚幻引擎5.1现已发布! 2022年11月15日 其他应用 功能 广播与实况活动 建筑 影视 模拟 汽车与运输 游戏 虚幻引擎5.1 虚拟制片 我们很高兴地宣布,虚幻引擎5 ...
- geoserver发布地图服务后不能预览,竟然变成下载WMS文件
geoserver发布地图服务后不能预览,竟然变成下载WMS文件 问题描述:geoserver发布地图服务后不能预览,竟然变成下载WMS文件,用记事本打开下载文件显示错误信息:java.lang.Nu ...
- 为AList V3添加在线epub预览支持教程
文章目录 为AList V3添加在线epub预览支持教程 说明 动图演示 工具准备 部署 修改Nginx设置 修改spreads.html文件 修改AList预览设置 为AList V3添加在线epu ...
- Qt Widgets 和 Qt Quick / QML
简述 Qt Widget 是Qt传统的C++界面类库: Qt Quick 是Qt新生的QML界面类库: QML(Qt Modeling Language)是一种用户界面规范的声明式语言,用于替换Qt ...
最新文章
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块
- 《你不知道的JavaScript》整理(四)——原型
- 大闸蟹谋定功能性养殖-丰收节交易会·李喜贵: 科技示范基地
- 十进制小数转换为二进制
- 51Nod 1003 阶乘后面0的数量 | 思维
- 征稿 | 2019年全国知识图谱与语义计算大会(CCKS2019)投稿时间延长
- 信息学奥赛一本通(1406:单词替换)
- java中的10的算法,Java中10个常用的排序算法
- ios mysql注册登录界面_iOS学习2:创建属于自己的页面,自定义初始界面
- (原)数据结构之树状数组详解
- 等保2.0|二级等保和三级等保要求对比
- [NOIP2007]矩阵取数游戏(详细题解、含多种思路)
- 读懂复利“魔力” 30年让你成为千万富翁
- html关闭广告代码,JS实现可点击展开与关闭的左侧广告代码
- android 代码设置 键盘适应_MTK6577+Android之按键(key)修改
- 从前端到全栈-基础能力-js-异步编程
- 电脑硬件:cpu后边数字及字母的意思
- 谷歌地球(Google Earth) 7.3.3.7721
- 【VC】accent conversion 口音转换论文
- 看看京东应急供应链是怎样构建的?
热门文章
- php编写用户登录页面,PHP实现用户登录页面
- BCD码转二进制的数学原理
- 【论文汇总】Semantic-Segmentation(语义分割)
- 2022软件测试工程师涨薪攻略,3年如何达到30K
- dedecms切换模板css,dedecms织梦网站怎么更换模板主题
- 小米android n 分屏,分屏大师
- python读取excel内容把空格去掉_python读取EXCEL是去掉空白行和表头全部重命名
- 关于TCP的确认、重传机制
- 中国联通:今年5G资本开支维持在80亿元,年末建成超4万个5G基站
- Matlab/Simulink自动生成STM32代码_基于模型的开发_环境搭建