日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt编写地图综合应用14-离线地图下载

發布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt编写地图综合应用14-离线地图下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

網上其實有很多各種各樣的離線地圖下載器,大部分都是要收費的,免費的要么是限制了下載的瓦片數量或者級別,要么是下載的瓦片圖打上了水印,看起來很難看,由于經常需要用到離線地圖,擺脫這個限制,特意花了點時間重新研究了瓦片地圖的原理,做了個離線地圖下載器,其實瓦片地圖下載沒有那么復雜,其實就是從開放的幾個服務器地址組建要請求的瓦片地圖的地址,發送請求以后會自動將圖片返回給你,你只需要拿到圖片數據保存成圖片即可。

瓦片地圖下載流程步驟如下:

  • 獲取可視區域或者行政區域的范圍
  • 拿到區域的左下角右上角經緯度坐標
  • 根據層級數計算對應層級的瓦片數
  • 自動生成下載瓦片地圖的地址并發出請求
  • 解析收到的數據保存成圖片
  • 更新對應界面的下載數量和進度
  • 可選擇對應保存的目錄、全選層級、中途停止下載等
  • 可選擇是下載街道圖還是衛星圖等
  • 二、功能特點

  • 多線程同步下載多級別瓦片地圖,不卡界面。
  • 內置多個離線地圖下載請求地址,自動隨機選擇一個發送請求。
  • 下載地圖類型同時支持街道圖和衛星圖。
  • 自動計算可視區域或者行政區域的下載瓦片數量。
  • 下載的級別可以自定義范圍和選擇。
  • 每個瓦片下載完成都發送信號通知,參數包括下載用時。
  • 可設置下載最大超時時間,超過了則丟棄跳到下一個下載任務。
  • 實時顯示下載進度,以及當前級別已經下載的瓦片數和總瓦片數。
  • 下載過程中可以停止下載,下載完成自動統計總用時。
  • 內置經緯度和屏幕坐標互相轉換函數。
  • 目前支持百度地圖,其他地圖比如谷歌地圖、騰訊地圖、高德地圖可以定制。
  • 函數接口友好和統一,使用簡單方便,就一個類。
  • 支持任意Qt版本、任意系統、任意編譯器。
  • 三、體驗地址

  • 體驗地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取碼:o05q 文件名: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); }

    總結

    以上是生活随笔為你收集整理的Qt编写地图综合应用14-离线地图下载的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。