百度地圖開發-實現離線地圖功能 05

—阿輝發表於2021-08-29

上一篇我們根據研究學習,實現了實時定位顯示功能,可以在地圖上顯示出自己所處的位置,並實時進行自動更新。那麼接下來就讓我們實現離線地圖功能。

在日常的業務開發過程中,很多時候都會使用離線地圖。那麼我們需要在有網的時候載入並下載所處地區的地圖,當沒有運營商網路或WIFI的時候,就可以無感切換到離線地圖,不會過大影響使用者的使用。

實現離線地圖功能

關於離線地圖,這塊的內容百度教程說明的不是很詳細,具體的還是需要你下載他們提供的demo,自己去研究,否則很難實現離線地圖的功能。

離線地圖的實現主要有兩種方式:

一、將自己提前下載好的離線地圖檔案存放到app軟體的特定位置處。

這個方法目前官方是沒有說明的,根據網上說法是之前版本有特殊說明,可以匯入離線地圖,最新版已經將此介面棄用掉了。但是經過我的研究發現,其實還是可以巧用的。

百度地圖的下載檔案是以.dat格式結尾的,根據對百度地圖官方APP的研究,發現它會將下載的離線地圖快取到 Android/data/app包名/files/vmp 中,大家可以看下自己android手機快取的百度地圖離線地圖地址。

其實我當時也在猜想,既然它官方快取的地址是這裡,那是不是就證明它在SDK中,是優先從這個地址中檢索離線地圖進行展示的。如果是這樣子的話,是不是就可以把我提前下載好的地圖檔案放在這裡。

事實證明確實是這樣子的,將需要快取目的地的離線地圖放到這個目錄下,在手機沒有網路的情況下,可以載入顯示出地圖。

如果你的業務需求主動下載很困難的話,可以使用這種方式,遠端給客戶更新離線地圖,方便其在現場使用。

具體地址見下圖:頂部紅框部分是地址,下部紅圈部分是下載的天津市離線地圖,在沒有網路的情況下,SDK會預設載入離線地圖進行顯示。

二、通過MKofflineMap來主動下載地圖。

我們們先按照官網給的教程走一篇,看到底會不會遇到難題。

如果是新手看離線地圖這塊的教程,會滿臉懵逼的。官方只是給你羅列出幾個具體的關鍵點,一些細節性的操作沒有說明。

  • 初始化離線地圖
MKOfflineMap mOffline = new MKOfflineMap();
// 傳入MKOfflineMapListener,離線地圖狀態發生改變時會觸發該回撥
mOffline.init(listener);
  • 開始下載
//獲取城市ID
ArrayList<MKOLSearchRecord> records = mOffline.searchCity(cityName);
if (records != null && records.size() == 1) {
    cityId = records.get(0).cityID;
}

// 開始下載離線地圖
// cityID 城市的數字標識
mOffline.start(cityid);
  • 暫停下載
//暫停下載
mOffline.pause(cityid);
  • 停止下載
//停止下載
mOffline.pause(cityid);
  • 刪除下載
//刪除下載
mOffline.remove(cityid);
  • 更新下載
//更新下載
mOffline.update(cityid);

關於更新下載,在更新過程中會通過onGetOfflineMapState來回撥資訊,可檢視更新進度、新離線地圖安裝、版本更新提示等功能。

上面的內容是官方給的教程,按照它進行操作確實可以下載到地圖,但是沒有提示,不友好,而且開發者根本不知道地圖下載到哪裡去了,需要自己去根據給的DEMO,再去研究才可以。

下面是結合官方教程和官方API,DEMO等,摸索出來的。目前只是簡單實現地圖的下載,下載進度值的顯示。後面你可以根據自己的業務需求來進行定製操作。

1、初始化離線地圖

2、通過城市ID下載對應地圖

3、在回撥函式中顯示地圖下載進度(0-100)

下來就讓我們實際操作一遍

點選事件進行地圖的下載和暫停

在監聽事件mKOfflineMapListener中,利用回撥函式來實時獲取下載地圖的進度。

執行後,點選開始下載,就可以實現天津市地圖的離線操作,會在回撥函式中獲取到下載進度,實時列印顯示在軟體介面上。

當進度走完,你就會在紅框地址的資料夾下面看到已經下載的天津的離線地圖檔案。

哈哈哈,是不是感覺很nice。

上面我只是簡單的介紹下載離線地圖,這裡面關於圍繞離線地圖有很多玩法,具體根據自己的業務進行結合,可以實現。

好了今天的分享就在這裡,感謝你的閱讀。

對了提醒大家一句,多看DEMO,它比官方文件教程強太多了。

小寄語

人生短暫,我不想去追求自己看不見的,我只想抓住我能看的見的。

原創不易,給個關注。

我是阿輝,感謝您的閱讀,如果對你有幫助,麻煩點贊、轉發 謝謝。

相關文章