摘要:用户使用地图的时候,希望不联网就能展示地图。这时,就需要使用到离线地图了。如何在百度地图SDK里引入离线地图呢?
-------------------------------------------------------------------------------------------------------------------
相关阅读:
-------------------------------------------------------------------------------------------------------------------
一、下载离线地图包
首先选择了手机品牌和手机型号:
选择好手机后,系统会出来提示。请选择旧版本地图进行下载。
因为目前SDK只能使用栅格图,所以我们必须下载旧版本的地图。后期SDK将支持矢量图,到时候北京市的离线地图就从114M降低到14M了。
预计6月份就能使用新版离线地图了~~~
比如,我选择下载了北京市的离线地图:
解压后,有两个文件。一个是BaiduMap,一个是安装说明。
不要管安装说明,把BaiduMap打开,能看到Mapdata文件夹。拷贝这个文件夹。
将Mapdata文件夹拷贝到手机SD卡的BaiduMapSdk文件夹根目录下。
二、编写离线地图代码
找到主java文件,并在activity里申明变量。
MKOfflineMap mOffline = null; //离线地图变量
然后在onCreate函数里写离线地图初始化的代码:
mOffline= newMKOfflineMap();
mOffline.init(mBMapMan,newMKOfflineMapListener() {public void onGetOfflineMapState(int type, intstate) {switch(type) {caseMKOfflineMap.TYPE_DOWNLOAD_UPDATE:
{
MKOLUpdateElement update=mOffline.getUpdateInfo(state);//mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));
}break;caseMKOfflineMap.TYPE_NEW_OFFLINE:
Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));break;caseMKOfflineMap.TYPE_VER_UPDATE:
Log.d("OfflineDemo", String.format("new offlinemap ver"));break;
}
}
}
);
int num =mOffline.scan();//if (num != 0) mText.setText(String.format("已安装%d个离线包", num));
三、连真机,看运行看结果。
看,这是没有联网,展示地图的效果。
四、java文件全部源代码
packagecom.baidu.searchpoi;
importandroid.app.Activity;importandroid.os.Bundle;importjava.util.ArrayList;importjava.util.List;importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.graphics.Point;importandroid.graphics.drawable.Drawable;importandroid.location.Location;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.widget.Toast;importcom.baidu.mapapi.BMapManager;importcom.baidu.mapapi.GeoPoint;importcom.baidu.mapapi.ItemizedOverlay;importcom.baidu.mapapi.LocationListener;importcom.baidu.mapapi.MKAddrInfo;importcom.baidu.mapapi.MKDrivingRouteResult;importcom.baidu.mapapi.MKGeneralListener;importcom.baidu.mapapi.MKLocationManager;importcom.baidu.mapapi.MKOLUpdateElement;importcom.baidu.mapapi.MKOfflineMap;importcom.baidu.mapapi.MKOfflineMapListener;importcom.baidu.mapapi.MKPlanNode;importcom.baidu.mapapi.MKPoiResult;importcom.baidu.mapapi.MKSearch;importcom.baidu.mapapi.MKSearchListener;importcom.baidu.mapapi.MKTransitRouteResult;importcom.baidu.mapapi.MKWalkingRouteResult;importcom.baidu.mapapi.MapActivity;importcom.baidu.mapapi.MapController;importcom.baidu.mapapi.MapView;importcom.baidu.mapapi.MyLocationOverlay;importcom.baidu.mapapi.Overlay;importcom.baidu.mapapi.OverlayItem;importcom.baidu.mapapi.PoiOverlay;importcom.baidu.mapapi.RouteOverlay;importcom.baidu.mapapi.TransitOverlay;publicclassSearchPOIActivityextendsMapActivity {//申明变量BMapManager mBMapMan =null;
MapView mMapView=null;
MKOfflineMap mOffline=null;//离线地图变量@OverridepublicvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mBMapMan=newBMapManager(getApplication());
mBMapMan.init("4AA2949E616E069C37CDC3152E8C401A05A0035D",null);super.initMapActivity(mBMapMan);
mMapView=(MapView) findViewById(R.id.bmapsView);
mMapView.setBuiltInZoomControls(true);//设置启用内置的缩放控件MapController mMapController= mMapView.getController();//得到mMapView的控制权,可以用它控制和驱动平移和缩放GeoPoint point =newGeoPoint((int) (39.93 *1E6),
(int) (116.42 * 1E6));//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)mMapController.setCenter(point);//设置地图中心点mMapController.setZoom(13);//设置地图zoom级别//mMapView.setSatellite(true);//卫星图//mMapView.setTraffic(true);//交通流量mOffline=newMKOfflineMap();
mOffline.init(mBMapMan,newMKOfflineMapListener() {publicvoidonGetOfflineMapState(inttype,intstate) {switch(type) {caseMKOfflineMap.TYPE_DOWNLOAD_UPDATE:
{
MKOLUpdateElement update=mOffline.getUpdateInfo(state);//mText.setText(String.format("%s : %d%%", update.cityName, update.ratio));}break;caseMKOfflineMap.TYPE_NEW_OFFLINE:
Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));break;caseMKOfflineMap.TYPE_VER_UPDATE:
Log.d("OfflineDemo", String.format("new offlinemap ver"));break;
}
}
}
);intnum =mOffline.scan();//if (num != 0) mText.setText(String.format("已安装%d个离线包", num));}
@OverrideprotectedbooleanisRouteDisplayed() {returnfalse;
}
@OverrideprotectedvoidonDestroy() {if(mBMapMan !=null) {
mBMapMan.destroy();
mBMapMan=null;
}super.onDestroy();
}
@OverrideprotectedvoidonPause() {if(mBMapMan !=null) {
mBMapMan.stop();
}super.onPause();
}
@OverrideprotectedvoidonResume() {if(mBMapMan !=null) {
mBMapMan.start();
}super.onResume();
}}