Qt编写地图综合应用14-离线地图下载
生活随笔
收集整理的這篇文章主要介紹了
Qt编写地图综合应用14-离线地图下载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言
網上其實有很多各種各樣的離線地圖下載器,大部分都是要收費的,免費的要么是限制了下載的瓦片數量或者級別,要么是下載的瓦片圖打上了水印,看起來很難看,由于經常需要用到離線地圖,擺脫這個限制,特意花了點時間重新研究了瓦片地圖的原理,做了個離線地圖下載器,其實瓦片地圖下載沒有那么復雜,其實就是從開放的幾個服務器地址組建要請求的瓦片地圖的地址,發送請求以后會自動將圖片返回給你,你只需要拿到圖片數據保存成圖片即可。
瓦片地圖下載流程步驟如下:
二、功能特點
三、體驗地址
四、效果圖
五、相關代碼
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); }總結
以上是生活随笔為你收集整理的Qt编写地图综合应用14-离线地图下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struct cdev结构体和cdev_
- 下一篇: ideaspringboot项目上传服务