百度離線地圖開發

本文參照: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部分的相關介紹。

初始化離線地圖的核心代碼如下:

  1. MKOfflineMap mOffline = null//申明變量  
  2. MapController mMapController  = mMapView.getController();  
  3.    
  4.    
  5. //寫在onCreate函數裏  
  6. mOffline = new MKOfflineMap();  
  7. //offline 實始化方法用更改。  
  8. mOffline.init(mMapController, new MKOfflineMapListener() {  
  9.     @Override  
  10.     public void onGetOfflineMapState(int type, int state) {  
  11.         switch (type) {  
  12.         case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:  
  13.             {  
  14.                 MKOLUpdateElement update = mOffline.getUpdateInfo(state);  
  15.                 //mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));  
  16.             }  
  17.             break;  
  18.         case MKOfflineMap.TYPE_NEW_OFFLINE:  
  19.             Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));  
  20.             break;  
  21.         case MKOfflineMap.TYPE_VER_UPDATE:  
  22.             Log.d("OfflineDemo", String.format("new offlinemap ver"));  
  23.             break;  
  24.         }      
  25.           }  
  26. }  
  27. );  

3.導入離線包

SDK支持導入離線包,將從官方渠道下載的離線包解壓後,把其中的vmp文件夾拷入SD卡根目錄下的BaiduMapSdk文件夾內。 使用離線地圖,請下載

  1. int num = mOffline.scan();  
  2. //if (num != 0)  
  3.     //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();




修改後,在啓動應用的啓動activity中,直到離線地圖拷貝完成後,再進行跳轉操作

<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();
	}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章