本文參照:http://blog.sina.com.cn/s/blog_5a6f39cf01014wua.html; http://developer.baidu.com/map/sdkandev-10.htm
1.離線地圖簡介
百度地圖SDK自2.0.0版本起,採用的是矢量版離線地圖,請開發者在下載時注意選擇。 使用離線地圖,請下載。
2.初始化
在使用offline map之前需先創建MapView。MapView的創建詳見Hello World部分的相關介紹。
初始化離線地圖的核心代碼如下:
- MKOfflineMap mOffline = null; //申明變量
- MapController mMapController = mMapView.getController();
- //寫在onCreate函數裏
- mOffline = new MKOfflineMap();
- //offline 實始化方法用更改。
- mOffline.init(mMapController, new MKOfflineMapListener() {
- @Override
- public void onGetOfflineMapState(int type, int state) {
- switch (type) {
- case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
- {
- MKOLUpdateElement update = mOffline.getUpdateInfo(state);
- //mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));
- }
- break;
- case MKOfflineMap.TYPE_NEW_OFFLINE:
- Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));
- break;
- case MKOfflineMap.TYPE_VER_UPDATE:
- Log.d("OfflineDemo", String.format("new offlinemap ver"));
- break;
- }
- }
- }
- );
3.導入離線包
SDK支持導入離線包,將從官方渠道下載的離線包解壓後,把其中的vmp文件夾拷入SD卡根目錄下的BaiduMapSdk文件夾內。 使用離線地圖,請下載。
- int num = mOffline.scan();
- //if (num != 0)
- //mText.setText(String.format("已安裝%d個離線包", num));
4.下載離線包
SDK支持下載離線包。提供如下功能:
1. 返回熱門城市列表。
2. 城市名搜索離線地圖信息。
3. 啓動下載。
4. 暫停下載。
5. 刪除離線地圖。
6. 多個APP共享一份離線地圖數據。
--------------------------------------------------------------------項目應用---------------------------------------------------------------------------------
1.說明:
在應用開始啓動時,會檢查sd卡的相應目錄是否存在離線地圖文件,不存在時會進行異步拷貝操作,進入主界面即地圖頁面。
2.發現的問題:
在清空系統設置中的數據後,第一次進入,離線地圖一直顯示不了,退出後再次進入才能正常顯示離線地圖。
3.方案:
多次調試後發現,需要在地圖文件存在的情況下,初始化mapview並進行離線scan操作
離線掃描方法
<pre name="code" class="java">mOffline = new MKOfflineMap();
mOffline.init(mMapController, new MKOfflineMapListener() {
public void onGetOfflineMapState(int type, int state) {
switch (type) {
case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
MKOLUpdateElement update = mOffline.getUpdateInfo(state);
Log.v("OfflineDemo",
String.format("update") + update.toString());
break;
case MKOfflineMap.TYPE_NEW_OFFLINE:
mHandler.sendEmptyMessage(MAP_REFRESH);
Log.v("OfflineDemo",
String.format("add offlinemap num:%d", state));
break;
case MKOfflineMap.TYPE_VER_UPDATE:
Log.v("OfflineDemo", String.format("new offlinemap ver"));
break;
}
}
});
int num = mOffline.scan();
<pre name="code" class="java">@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.setContentView(R.layout.activity_welcome);
copyOfflineMap();
}
private void copyOfflineMap() {
new Thread() {
public void run() {
if (FileUtils.isExist(FileUtils.SDCARD_ROOT_PATH)
&& !FileUtils.isExist(FileUtils.SDCARD_OFFLINE_MAP
+ "beijing_131.dat")) {
boolean res = FileUtils.copyFileToLocal(
getApplicationContext(), R.raw.beijing_131,
FileUtils.SDCARD_OFFLINE_MAP, "beijing_131.dat");
Log.v("OfflineDemo", "0App.res=" + res);
}
if (FileUtils.isExist(FileUtils.SDCARD_ROOT_PATH)
&& !FileUtils.isExist(FileUtils.SDCARD_OFFLINE_MAP_L
+ "beijing_131.dat")) {
boolean res = FileUtils.copyFileToLocal(
getApplicationContext(), R.raw.beijing_131_l,
FileUtils.SDCARD_OFFLINE_MAP_L, "beijing_131.dat");
Log.v("OfflineDemo", "1App.res=" + res);
}
mHandler.sendEmptyMessageDelayed(0, 800);
}
}.start();
}