android 开发 百度地图,百度地图android开发(转)

摘要:用户使用地图的时候,希望不联网就能展示地图。这时,就需要使用到离线地图了。如何在百度地图SDK里引入离线地图呢?

-------------------------------------------------------------------------------------------------------------------

相关阅读:

-------------------------------------------------------------------------------------------------------------------

一、下载离线地图包

首先选择了手机品牌和手机型号:

a4c26d1e5885305701be709a3d33442f.png

选择好手机后,系统会出来提示。请选择旧版本地图进行下载。

因为目前SDK只能使用栅格图,所以我们必须下载旧版本的地图。后期SDK将支持矢量图,到时候北京市的离线地图就从114M降低到14M了。

预计6月份就能使用新版离线地图了~~~

a4c26d1e5885305701be709a3d33442f.png

比如,我选择下载了北京市的离线地图:

a4c26d1e5885305701be709a3d33442f.png

解压后,有两个文件。一个是BaiduMap,一个是安装说明。

a4c26d1e5885305701be709a3d33442f.png

不要管安装说明,把BaiduMap打开,能看到Mapdata文件夹。拷贝这个文件夹。

a4c26d1e5885305701be709a3d33442f.png

将Mapdata文件夹拷贝到手机SD卡的BaiduMapSdk文件夹根目录下。

a4c26d1e5885305701be709a3d33442f.png

二、编写离线地图代码

找到主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));

三、连真机,看运行看结果。

看,这是没有联网,展示地图的效果。

a4c26d1e5885305701be709a3d33442f.png

四、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();

}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值