在上个版本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版本(新增高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)相关推荐

  1. Qt Quick Qml 之QML与C++ 混合编程学习

    <QML与C++ 混合编程学习> 1. 在 QML 中使用 C++ 类和对象 1) C++ 类的修改 2) 注册 QML 类型 3) 在 QML 中导入类型 4) 在 QML 创建由 C+ ...

  2. Qt Quick QML实现自定义虚拟软键盘详解

    Qt Quick QML实现自定义虚拟软键盘详解 在Qt5.8版本推出的QML软键盘功能中,有两种实现方案.一种是基于中文汉字数据库,另一种是基于Google拼音输入引擎.然而,相比于官方软键盘,这两 ...

  3. Qt Quick QML 实例之疯狂数字游戏(QML C++混合编程、翻译、QSetting )【建议收藏】

    文章目录 一.开门见山 二.最基本的框架(v0.1) 1. 后端数据处理 2. 导出 C++ 对象的 QML 的属性 3. 前台 UI 数据 三.完善执行逻辑(v0.2) 四.发布版本(v1.0) 1 ...

  4. QT Quick QML 实例之 Popup 弹出界面

    QT Quick QML 实例之 Popup 弹出界面 一.演示 二.实现过程 1. 居中弹出 2. 正下方弹出 所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧! GIT工程文件 ...

  5. QT Quick Qml 实例——滑块拖动颜色框的平移(Gradient、drag、clip、transform、antialiasing)

    <实例--滑块拖动颜色框的平移> 1. 简介 2. 详解 所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧! QML其它文章请点击这里:     QT QUICK QM ...

  6. 虚幻引擎5.1版本新增功能

    虚幻引擎5.1版本新增功能 虚幻引擎5.1现已发布! 2022年11月15日 其他应用 功能 广播与实况活动 建筑 影视 模拟 汽车与运输 游戏 虚幻引擎5.1 虚拟制片 我们很高兴地宣布,虚幻引擎5 ...

  7. geoserver发布地图服务后不能预览,竟然变成下载WMS文件

    geoserver发布地图服务后不能预览,竟然变成下载WMS文件 问题描述:geoserver发布地图服务后不能预览,竟然变成下载WMS文件,用记事本打开下载文件显示错误信息:java.lang.Nu ...

  8. 为AList V3添加在线epub预览支持教程

    文章目录 为AList V3添加在线epub预览支持教程 说明 动图演示 工具准备 部署 修改Nginx设置 修改spreads.html文件 修改AList预览设置 为AList V3添加在线epu ...

  9. Qt Widgets 和 Qt Quick / QML

    简述 Qt Widget 是Qt传统的C++界面类库: Qt Quick 是Qt新生的QML界面类库: QML(Qt Modeling Language)是一种用户界面规范的声明式语言,用于替换Qt ...

最新文章

  1. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块
  2. 《你不知道的JavaScript》整理(四)——原型
  3. 大闸蟹谋定功能性养殖-丰收节交易会·李喜贵: 科技示范基地
  4. 十进制小数转换为二进制
  5. 51Nod 1003 阶乘后面0的数量 | 思维
  6. 征稿 | 2019年全国知识图谱与语义计算大会(CCKS2019)投稿时间延长
  7. 信息学奥赛一本通(1406:单词替换)
  8. java中的10的算法,Java中10个常用的排序算法
  9. ios mysql注册登录界面_iOS学习2:创建属于自己的页面,自定义初始界面
  10. (原)数据结构之树状数组详解
  11. 等保2.0|二级等保和三级等保要求对比
  12. [NOIP2007]矩阵取数游戏(详细题解、含多种思路)
  13. 读懂复利“魔力” 30年让你成为千万富翁
  14. html关闭广告代码,JS实现可点击展开与关闭的左侧广告代码
  15. android 代码设置 键盘适应_MTK6577+Android之按键(key)修改
  16. 从前端到全栈-基础能力-js-异步编程
  17. 电脑硬件:cpu后边数字及字母的意思
  18. 谷歌地球(Google Earth) 7.3.3.7721
  19. 【VC】accent conversion 口音转换论文
  20. 看看京东应急供应链是怎样构建的?

热门文章

  1. php编写用户登录页面,PHP实现用户登录页面
  2. BCD码转二进制的数学原理
  3. 【论文汇总】Semantic-Segmentation(语义分割)
  4. 2022软件测试工程师涨薪攻略,3年如何达到30K
  5. dedecms切换模板css,dedecms织梦网站怎么更换模板主题
  6. 小米android n 分屏,分屏大师
  7. python读取excel内容把空格去掉_python读取EXCEL是去掉空白行和表头全部重命名
  8. 关于TCP的确认、重传机制
  9. 中国联通:今年5G资本开支维持在80亿元,年末建成超4万个5G基站
  10. Matlab/Simulink自动生成STM32代码_基于模型的开发_环境搭建