Qt编写地图综合应用14-离线地图下载
时间: 2020-04-17来源:OSCHINA
前景提要
一、前言
网上其实有很多各种各样的离线地图下载器,大部分都是要收费的,免费的要么是限制了下载的瓦片数量或者级别,要么是下载的瓦片图打上了水印,看起来很难看,由于经常需要用到离线地图,摆脱这个限制,特意花了点时间重新研究了瓦片地图的原理,做了个离线地图下载器,其实瓦片地图下载没有那么复杂,其实就是从开放的几个服务器地址组建要请求的瓦片地图的地址,发送请求以后会自动将图片返回给你,你只需要拿到图片数据保存成图片即可。
瓦片地图下载流程步骤如下: 获取可视区域或者行政区域的范围 拿到区域的左下角右上角经纬度坐标 根据层级数计算对应层级的瓦片数 自动生成下载瓦片地图的地址并发出请求 解析收到的数据保存成图片 更新对应界面的下载数量和进度 可选择对应保存的目录、全选层级、中途停止下载等 可选择是下载街道图还是卫星图等
二、功能特点 多线程同步下载多级别瓦片地图,不卡界面。 内置多个离线地图下载请求地址,自动随机选择一个发送请求。 下载地图类型同时支持街道图和卫星图。 自动计算可视区域或者行政区域的下载瓦片数量。 下载的级别可以自定义范围和选择。 每个瓦片下载完成都发送信号通知,参数包括下载用时。 可设置下载最大超时时间,超过了则丢弃跳到下一个下载任务。 实时显示下载进度,以及当前级别已经下载的瓦片数和总瓦片数。 下载过程中可以停止下载,下载完成自动统计总用时。 内置经纬度和屏幕坐标互相转换函数。 目前支持百度地图,其他地图比如谷歌地图、腾讯地图、高德地图可以定制。 函数接口友好和统一,使用简单方便,就一个类。 支持任意Qt版本、任意系统、任意编译器。
三、体验地址 体验地址: https://pan.baidu.com/s/1uQsDQO5E5crUBN2J-nPeLQ 提取码:1jkp 文件名:bin_map.zip 国内站点: https://gitee.com/feiyangqingyun 国际站点: https://github.com/feiyangqingyun 个人主页: https://blog.csdn.net/feiyangqingyun 知乎主页: https://www.zhihu.com/people/feiyangqingyun/
四、效果图

五、相关代码 void MapDownload::download(const QString &url, const QString &dirName, const QString &fileName, int zoom) { if (url.isEmpty()) { return; } //启动计时 QTime time; time.start(); //先判断文件夹是否存在,不存在则新建 QDir dir(dirName); if (!dir.exists()) { dir.mkpath(dirName); } //局部的事件循环,不卡主界面 QEventLoop eventLoop; QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url))); connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit())); //设置下载超时 QTimer timer; connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); timer.setSingleShot(true); timer.start(timeout); eventLoop.exec(); bool error = false; if (reply->bytesAvailable() > 0 && reply->error() == QNetworkReply::NoError) { //读取所有数据保存成文件 QByteArray data = reply->readAll(); QFile file(dirName + fileName); if (file.open(QFile::WriteOnly | QFile::Truncate)) { file.write(data); file.close(); } } else { //可以自行增加下载失败的统计 error = true; qDebug() << TIMEMS << "下载出错" << reply->errorString(); } int useTime = time.elapsed(); emit finsh(url, fileName, zoom, useTime, error); }

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行