本文参照:http://blog.sina.com.cn/s/blog_5a6f39cf01014wua.html; http://developer.baidu.com/map/sdkandev-10.htm
百度地图SDK自2.0.0版本起,采用的是矢量版离线地图,请开发者在下载时注意选择。 使用离线地图,请下载。
在使用offline map之前需先创建MapView。MapView的创建详见Hello World部分的相关介绍。
初始化离线地图的核心代码如下:
SDK支持导入离线包,将从官方渠道下载的离线包解压后,把其中的vmp文件夹拷入SD卡根目录下的BaiduMapSdk文件夹内。 使用离线地图,请下载。
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(); }