参照: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操作
离线扫描方法
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();
@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();
}