Qt编写地图综合应用14-离线地图下载
生活随笔
收集整理的這篇文章主要介紹了
Qt编写地图综合应用14-离线地图下载
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、前言
網(wǎng)上其實(shí)有很多各種各樣的離線地圖下載器,大部分都是要收費(fèi)的,免費(fèi)的要么是限制了下載的瓦片數(shù)量或者級(jí)別,要么是下載的瓦片圖打上了水印,看起來很難看,由于經(jīng)常需要用到離線地圖,擺脫這個(gè)限制,特意花了點(diǎn)時(shí)間重新研究了瓦片地圖的原理,做了個(gè)離線地圖下載器,其實(shí)瓦片地圖下載沒有那么復(fù)雜,其實(shí)就是從開放的幾個(gè)服務(wù)器地址組建要請(qǐng)求的瓦片地圖的地址,發(fā)送請(qǐng)求以后會(huì)自動(dòng)將圖片返回給你,你只需要拿到圖片數(shù)據(jù)保存成圖片即可。
瓦片地圖下載流程步驟如下:
二、功能特點(diǎn)
三、體驗(yàn)地址
四、效果圖
五、相關(guān)代碼
void MapDownload::download(const QString &url, const QString &dirName, const QString &fileName, int zoom) {if (url.isEmpty()) {return;}//啟動(dòng)計(jì)時(shí)QTime time;time.start();//先判斷文件夾是否存在,不存在則新建QDir dir(dirName);if (!dir.exists()) {dir.mkpath(dirName);}//局部的事件循環(huán),不卡主界面QEventLoop eventLoop;QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url)));connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));//設(shè)置下載超時(shí)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) {//讀取所有數(shù)據(jù)保存成文件QByteArray data = reply->readAll();QFile file(dirName + fileName);if (file.open(QFile::WriteOnly | QFile::Truncate)) {file.write(data);file.close();}} else {//可以自行增加下載失敗的統(tǒng)計(jì)error = true;qDebug() << TIMEMS << "下載出錯(cuò)" << reply->errorString();}int useTime = time.elapsed();emit finsh(url, fileName, zoom, useTime, error); }總結(jié)
以上是生活随笔為你收集整理的Qt编写地图综合应用14-离线地图下载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struct cdev结构体和cdev_
- 下一篇: iOS蓝牙开发框架