android百度地图自定义图层,百度地图开发之百度地图定位图层基本使用方法讲解...

(一):基本介绍:

百度地图可以直接提供定位功能,并且把位置信息以图层的形式标注在地图上面(PopupView),同时还支持自定义设置图标,这样便于用户直接查看位置信息。要实现以上的方法,我们主要需要用到MyLocationOverlay(在地图上面显示当前位置的一个覆盖物(图层)),PopupOverlay弹出的pop信息类似于Popupwindow。还有以下一些有关定位的类:LocationClient(),LocationData(用户的位置信息)。

(二):主要类与方法介绍:

1:MyLocationOverlay:一个显示用户当前位置的Overlay。该相当于一个覆盖物图层,用来在地图上面绘制用户当前的位置,同时我们可以在子类进行覆盖dispatchTap()来处理点击事件。主要有以下一些方法。

①:protected boolean dispatcheTap():在位置图标上面处理点击事件,默认返回false

②:public LocationData getMyLocation(): 获取定位图层当前的定位数据

③:public void setData(LocationData locData): 设置位置参数 [注]设置数据之后必须刷新mapview来使得设置生效,

④:public void setMarker(Drawable marker):设置定位的图标,[注]设置图标之后必须刷新mapview来时的设置生效.

⑤:public vois setLocationMode(MyLocationOverlay.LocationMode mode):来进行设置图层显示的位模式

2:LocationData():表示用户的一些位置信息:例如:定位精度(accurac,GPS定位时方向角度(direction),纬度坐标(latitude),经度坐标(longtiude),GPS定位时卫星数量(satekkitesNum),GPS定位时速度(speed)。

3:PopupOverlay:该类可以用来生成一个位置信息的pop弹窗.主要有以下一些方法:

1:public void showPopup(Bitmap pop,GeoPoint,int yOffset):显示pop弹窗。

2:public void hidePop(): 收起pop弹窗

(三)例子实现(主要来看以下百度sdk中的例子,注释已经重新添加了一下,很详细了)

1:定位信息监听:BDLoactionListener:

/**

* 定位SDK监听函数

*/

public class MyLocationListenner implements BDLocationListener {

@Override

public void onReceiveLocation(BDLocation location) {

if (location == null)

return ;

locData.latitude = location.getLatitude();

locData.longitude = location.getLongitude();

//如果不显示定位精度圈,将accuracy赋值为0即可

locData.accuracy = location.getRadius();

// 此处可以设置 locData的方向信息, 如果定位 SDK 未返回方向信息,用户可以自己实现罗盘功能添加方向信息。

locData.direction = location.getDerect();

//更新定位数据

myLocationOverlay.setData(locData);

//更新图层数据执行刷新后生效

mMapView.refresh();

//是手动触发请求或首次定位时,移动到定位点

Log.d("zttjiangqq", "locData:latitude:"+locData.latitude+",longitude:"+locData.longitude);

if (isRequest || isFirstLoc){

//移动地图到定位点

Log.d("LocationOverlay", "receive location, animate to it");

mMapController.animateTo(new GeoPoint((int)(locData.latitude* 1e6), (int)(locData.longitude * 1e6)));

isRequest = false;

myLocationOverlay.setLocationMode(LocationMode.FOLLOWING);

requestLocButton.setText("跟随");

mCurBtnType = E_BUTTON_TYPE.FOLLOW;

}

//首次定位完成

isFirstLoc = false;

}

public void onReceivePoi(BDLocation poiLocation) {

if (poiLocation == null){

return ;

}

}

}

2:创建Pop弹窗方法:

/**

* 创建弹出泡泡图层

*/

public void createPaopao(){

viewCache = getLayoutInflater().inflate(R.layout.custom_text_view, null);

popupText =(TextView) viewCache.findViewById(R.id

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于百度地图实现安卓定位、路径规划和步行导航功能的代码示例: 1. 在 AndroidManifest.xml 文件中添加以下权限: ``` <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> ``` 2. 在布局文件中添加一个地图控件: ``` <com.baidu.mapapi.map.MapView android:id="@+id/map_view" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 3. 在 Activity 中初始化百度地图: ``` // 获取地图控件引用 MapView mapView = findViewById(R.id.map_view); // 获取百度地图对象 BaiduMap baiduMap = mapView.getMap(); // 设置地图类型为普通地图 baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); // 开启定位层 baiduMap.setMyLocationEnabled(true); // 初始化定位客户端 LocationClient locationClient = new LocationClient(getApplicationContext()); // 创建定位监听器 BDLocationListener locationListener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { // 获取定位结果 double latitude = bdLocation.getLatitude(); // 纬度 double longitude = bdLocation.getLongitude(); // 经度 float radius = bdLocation.getRadius(); // 定位精度 // 更新地图位置 LatLng latLng = new LatLng(latitude, longitude); MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngZoom(latLng, 18); baiduMap.animateMapStatus(mapStatusUpdate); // 停止定位 locationClient.stop(); } }; // 设置定位监听器 locationClient.registerLocationListener(locationListener); // 开始定位 locationClient.start(); ``` 4. 实现路径规划和步行导航功能: ``` // 创建步行路线规划器 WalkingRoutePlanOption walkingRoutePlanOption = new WalkingRoutePlanOption(); walkingRoutePlanOption.from(PlanNode.withLocation(new LatLng(latitude1, longitude1))); // 起点 walkingRoutePlanOption.to(PlanNode.withLocation(new LatLng(latitude2, longitude2))); // 终点 // 发起步行路线规划请求 RoutePlanSearch routePlanSearch = RoutePlanSearch.newInstance(); routePlanSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() { @Override public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) { if (walkingRouteResult == null || walkingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) { // 步行路线规划失败 return; } // 获取步行路线结果 WalkingRouteLine walkingRouteLine = walkingRouteResult.getRouteLines().get(0); // 在地图上绘制步行路线 WalkingRouteOverlay walkingRouteOverlay = new WalkingRouteOverlay(baiduMap); walkingRouteOverlay.setData(walkingRouteLine); walkingRouteOverlay.addToMap(); walkingRouteOverlay.zoomToSpan(); // 开始步行导航 WalkingRouteOverlay.WalkingRouteOverlayOptions options = new WalkingRouteOverlay.WalkingRouteOverlayOptions(); options.setRouteNodeIndex(0); options.setEnableEdgePath(true); options.setEnableVoice(true); walkingRouteOverlay.setOptions(options); walkingRouteOverlay.setRouteInfo(walkingRouteLine); walkingRouteOverlay.startWalking(); } }); routePlanSearch.walkingSearch(walkingRoutePlanOption); ``` 注意:以上代码仅供参考,具体实现可能需要根据实际需求进行调整。此外,使用百度地图 API 需要注册并获取相应的 AK(Access Key)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值