其实00-1010上的线下地图下载器有很多种,大部分都是收费的。免费要么是限制下载的贴片数量或级别,要么是下载的贴片有水印,看起来很难看。因为经常需要离线地图来摆脱这种限制,所以我特意花了一些时间重新研究了平铺地图的原理,做了一个离线地图下载器。其实瓦片地图的下载并没有那么复杂。实际上,要请求的切片图的地址是从几个开放的服务器地址设置的。发送请求后,图片会自动返回给您。你只需要获取图片数据并保存为图片即可。
地图下载过程的步骤如下:
1.获取可见区域或行政区域的范围。
2.获取区域左下角和右上角的经纬度坐标。
3.根据级别号计算相应级别的平铺号。
4.自动生成下载图块地图的地址并发出请求。
5.分析接收到的数据,并将其保存为图片。
6.更新相应界面的下载数量和进度。
7.可以选择相应的保存目录,选择所有级别,中途停止下载等。
8.你可以选择下载街道地图还是卫星地图。
00-1010 1.无需接口卡,多线程同时下载多级切片地图。
2.内置多个离线地图下载请求地址,并自动随机选择一个发送请求。
3.下载地图类型支持街道地图和卫星地图。
4.自动计算可见区域或管理区域中下载的切片数量。
5.下载级别可以在范围和选择方面进行定制。
6.每个图块在下载时都会发出信号,参数包括下载时间。
7.您可以设置下载的最大超时时间。如果超过,您将放弃它并跳到下一个下载任务。
8.实时显示下载进度,以及当前级别已下载的切片数和总切片数。
9.下载过程中可以停止下载,下载后自动统计总时间。
10.内置经纬度与屏幕坐标的转换功能。
11.目前支持百度地图,谷歌地图、腾讯地图、高德地图等其他地图均可定制。
12.功能界面友好统一,使用简单方便,就一个类。
13.支持任何Qt版本,任何系统和任何编译器。
00-1010国内站点:[https://gitee.com/feiyangqingyun](3359gitee.com/feiyangqingyun)
国际网站:[https://github.com/Feiyangqingyun](3359github.com/Feiyangqingyun)
## 一、前言
## 二、功能特点
void mapdownload :3360 download(const QString URL,const QString dirName,const QString fileName,int cbdxq){
if(URL . isempty()){ 0
返回;
}
//启动计时器
QTime时间;
time . start();
//首先确定文件夹是否存在,如果不存在则新建一个文件夹。
QDir(DirName);
if(!dir . exists()){ 0
dir . MK path(DirName);
}
//本地事件循环,不是主界面
QEventLoop事件循环;
QNetworkReply * reply=manager-get(QNetworkRequest(QurL(URL)));
connect(回复、SIGNAL(完成())、eventLoop、SLOT(退出()));
//设置下载超时
QTimer定时器;
connect(定时器、SIGNAL(timeout())、eventLoop、SLOT(quit()));
timer . setsingletshot(true);
timer.start(超时);
eventLoop . exec();
bool错误=false
if(reply-bytes available)(0 reply-error()==qnetworkreply : norerr){ 0
//读取所有数据并保存为文件。
QByteArray数据=reply-readAll();
QFile文件(目录名文件名);
if(file . open(Qfile : write only | Qfile 3360: run cate)){ 0
file.write(数据);
file . close();
}
} else {
//可以自己添加下载失败的统计。
错误=真;
QDebug() TIMEMS“下载错误”回复-error string();
}
int useTime=time . appealed();
emit finsh(url、fileName、cbdxq、useTime、错误);
}