使用百度地图可以到http://developer.baidu.com/map/中下载SDK,sdk中有实例代码以及详细讲解。
百度地图有6个核心类:
①BMapManager
②MapView是地图主控件,相当于ViewGroup(可以填加控件)
MapView的MKMapViewListener用于处理地图事件回调。
③MapController用于完成地图控制 。
使用百度地图之前需要先申请一个API Key,如:
key:1A4A4ABEFBEECD8C17DEE880C4EA69B9607020B5
在加载layout之前必须先验证key:
mBMapManager.init(String strKey, MKGeneralListener listener);
strKey - 申请的授权验证码;listener - 注册回调事件.
MKGeneralListener是一个接口,其中有两个方法:onGetNetworkState(int iError)和onGetPermissionState(int iError)。分别是验证网络和验证授权key的。
增加缩放按钮用:mapView.setBuiltInZoomControls(true);
控制器controller是通过mapView.getController();获得的,可以控制地图的平移、旋转和缩放。
平移:将给定的位置点以动画的形式移动至地图中心。
controller.animateTo(GeoPoint point);
GeoPoint表示一个地理坐标点,存放经度和纬度,以微度的整数形式存储。
controller.setCenter(GeoPoint point);方法是将给定点设置为地图显示的中心。
旋转:水平旋转,旋转范围是:-180------180
int mapRotation = mapView.getMapRotation();
mapRotation += 30;
controller.setRotation(mapRotation);
俯视角度旋转,旋转范围是:0------ -45
int mapOverlooking = mapView.getMapOverlooking();
mapOverlooking += -30;
controller.setOverlooking(mapOverlooking);
缩放:
controller.setZoom(float zoomLevel);//设置地图的缩放级别,范围是[3,19]
controller.zoomIn();//放大一级
controller.zoomOut();//缩小一级
设置显示交通图:mapView.setTraffic(true);
设置显示卫星图:mapView.setSatellite(true);
覆盖物
所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线和多边形和圆)、定位图标等。覆盖物拥有自己的地理坐标,当拖动或缩放地图时,它们会相应的处理。
覆盖物包括:
覆盖物的抽象基类:Overlay(第④个核心类)
几何图形绘制覆盖物:GraphicsOverlay
文字绘制覆盖物:TextOverlay
分条目覆盖物:ItemizedOverlay
本地搜索覆盖物:PoiOverlay
路线规划覆盖物:RouteOverlay
换乘路线覆盖物:TransitOverlay
我的位置覆盖物:MyLocationOverlay
从2.0.0开始,SDK不支持直接继承Overlay,用户可以通过继承ItemizedOverlay来添加覆盖物。
添加覆盖物步骤:
①定义覆盖物
GraphicsOverlay graphicsOverlay = new GraphicsOverlay(mapView);
②设置覆盖物的数据
graphicsOverlay.setData(drawCircle());// drawCircle()的代码见下面
③将覆盖物集合添加到mapView
mapView.getOverlays().add(graphicsOverlay);
④刷新mapView
mapView.refresh();
private Graphic drawCircle() { // 构建圆 Geometry circleGeometry = new Geometry(); // 设置圆心和半径 circleGeometry.setCircle(homePoint, 2500); //设置样式 Symbol circleSymbol = new Symbol(); Symbol.Color circleColor = circleSymbol.new Color(); circleColor.red = 0; circleColor.green = 255; circleColor.blue = 0; circleColor.alpha = 126; /* * color - 颜色 status - 填充状态,0表示不填充,1表示填充 linewidth - 线宽,当填充状态为填充时线宽无意义 */ circleSymbol.setSurface(circleColor,1,3); //生成Graphic对象 Graphic circleGraphic = new Graphic(circleGeometry, circleSymbol); return circleGraphic; }
搜索
百度地图移动版API集成搜索服务包括:位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索。
核心类:
⑤MKSearch
⑥MKSearchListener
实现思路:
①初始化MKSearch类,通过init方法注册搜索结果的监听对象MKSearchListener,实现异步搜索服务。
接口MKSearchListener中有8种搜索方法:
步行路线搜索:
onGetWalkingRouteResult(MKWalkingRouteResult result, int iError)
公交搜索:
onGetTransitRouteResult(MKTransitRouteResult result, int iError)
联想词信息搜索:
onGetSuggestionResult(MKSuggestionResult result, int iError)
poi搜索:poi(Point of Interest兴趣点)
onGetPoiResult(MKPoiResult result, int type, int iError)
poi详情信息搜索:
onGetPoiDetailSearchResult(int type, int iError)
驾乘路线搜索:
onGetDrivingRouteResult(MKDrivingRouteResult result, int iError)
公交详情信息搜索:
onGetBusDetailResult(MKBusLineResult result, int iError)
地址信息搜索:
onGetAddrResult(MKAddrInfo result, int iError)
②通过自定义MySearchListener实现类,处理不同的回调方法,获得搜索结果。
③发起搜索
如:mkSearch.poiSearchNearBy("加油站", homePoint, 5000);
另外,需要将mapView的生命周期与Activity同步,所以要重写Activity的onResume()、onPause()、onDestroy()方法,并在这几个方法中调用mapView的相应方法mapView.onResume()、mapView.onPause()、mapView.destroy()。