zoukankan      html  css  js  c++  java
  • 百度地图3.0初用笔记(二)


    一、自己定义定位图层配置

      用百度地图进行显示定位时,能够配置定位图层的显示方式、方向及定位图标,这是通过 MyLocationConfigeration 对象来设置,并用BaiduMap 对象的 setMyLocationConfigeration 方法来设置的。更改showLocation 方法例如以下:

    	public void showLocation(BDLocation location) {
    		// 构造定位数据
    		MyLocationData locData = new MyLocationData.Builder()
    				.accuracy(location.getRadius())
    				// 此处设置开发人员获取到的方向信息。顺时针0-360
    				.direction(location.getDirection()).latitude(location.getLatitude())
    				.longitude(location.getLongitude()).build();
    		// 设置定位数据
    		mBaiduMap.setMyLocationData(locData);
    
    		// 默认配置
    		if (isFirstLoc) {
    			isFirstLoc = false;
    			// 设置地图缩放比例:17级100米
    			MapStatusUpdate ms = MapStatusUpdateFactory.zoomTo(17); 
    			mBaiduMap.setMapStatus(ms);
    		}
    		// 自己定义配置
    		MyLocationConfigeration config = new MyLocationConfigeration(
    		mCurrentMode, false, mCurrentMarker);
    		mBaiduMap.setMyLocationConfigeration(config);
    	}

      这里使用了自己定义配置来显示定位图层,MyLocationConfigeration 构造器有3个參数:

        mode:定位图层显示方式, 默觉得 LocationMode.NORMAL 普通态
        enableDirection:是否同意显示方向信息
        customMarker:设置用户自己定义定位图标,能够为 null

      演示样例中的 mCurrentMode和 mCurrentMarker定义及赋值例如以下:

    	// 定义
    	BitmapDescriptor mCurrentMarker = null;
    	MyLocationConfigeration.LocationMode mCurrentMode = null;
    	
    	// 初始化
    	mCurrentMarker = BitmapDescriptorFactory
    		.fromResource(R.drawable.icon_marka);
    	mCurrentMode = MyLocationConfigeration.LocationMode.FOLLOWING;

      mCurrentMode 也能够有3中方式:

        COMPASS: 罗盘态,显示定位方向圈,保持定位图标在地图中心
        FOLLOWING: 尾随态,保持定位图标在地图中心
        NORMAL: 普通态,更新定位数据时不正确地图做不论什么操作

      本例效果例如以下(FOLLOWING模式):

    FOLLOWING定位图层

      罗盘模式(COMPASS模式,自己定义图标为null 。显示方向为 true)例如以下:

    COMPASS定位层

      当然。默认的NORMAL普通模式下,百度地图是不会更新的。因此不能再屏幕中心看到定位图层,但它是存在的,仅仅是没显示而已。当手动将地图移动到该位置时,能够看到定位层效果。在(一)中之所以使用了 animateMapStatus() 方法来动态地显示定位层,就是由于默认的NORMAL模式不更新地图,所以採用了手动方式来实时地显示定位图层。


    二、地图事件监听

      BaiduMap类有各种地图事件监听接口。比方单击、双击、截屏、地图状态改变等。通过设置对应的监听函数后,便能够响应各种地图事件。比方对于单击事件,首先定义一个OnMapClickListener 对象:

    	OnMapClickListener listener = new OnMapClickListener() {
    
    		@Override
    		public boolean onMapPoiClick(MapPoi poiLocation) {
    			// TODO Auto-generated method stub
    			return false;
    		}
    
    		@Override
    		public void onMapClick(LatLng location) {
    			// 弹出提示框,显示经纬度
    			new AlertDialog.Builder(MainActivity.this)
    					.setTitle("Prompt")
    					.setMessage(
    							"MapClick:
      纬度: " + location.latitude
    									+ "
      经度: " + location.longitude)
    					.setPositiveButton("OK", null).show();
    		}
    	};
    

      然后调用 mBaiduMap.setOnMapClickListener(listener)  语句来设置后,便能够监听并响应地图的单击事件。

    地图单击响应


    三、地图广播监听

      地图有3个广播能够监听:

    网络错误广播:SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR
    key 验证失败广播:SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR
    key 验证失败广播,intent中附加信息错误码键:SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE

      首先,须要定义一个广播监听器:

    	public class SDKReceiver extends BroadcastReceiver {
    		@Override
    		public void onReceive(Context context, Intent intent) {
    			// TODO Auto-generated method stub
    			String action = intent.getAction();
    			if (action
    					.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
    				// key 验证失败,演示样例显示提示框
    				new AlertDialog.Builder(MainActivity.this).setTitle("Prompt")
    						.setMessage("The KEY of BaiduMap verifies failed")
    						.setPositiveButton("OK", null).show();
    			} else if (action
    					.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
    				// network error
    			} else if (action
    					.equals(SDKInitializer.SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE)) {
    				// key 验证失败。Intent中附加信息错误码键
    			}
    		}
    	}

      然后再注冊广播监听事件:

    		// 广播事件监听。在不须要时进行反注冊。比方销毁时
    		IntentFilter iFilter = new IntentFilter();
    		iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
    		iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
    		//iFilter.addAction(SDKInitializer.SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE);
    		mBroadcastRec = new SDKReceiver();
    		registerReceiver(mBroadcastRec, iFilter);

    这样,便能够监听到广播事件了,比方,当地图的KEY密钥错误的时候:

    KEY 验证失败监听

    当然,在不须要监听的时候能够用 unregisterReceiver(mReceiver)进行反注冊就可以。


  • 相关阅读:
    git环境搭建、git详细使用教程、快速上手git
    数据一致性解决方案实践
    锁的使用
    数据库连接池优化
    多级缓存优化实践
    服务端调优与JVM调优
    Sentinel 流量防卫兵
    Spring Cloud Gateway微服务网关
    OpenFeign与负载均衡
    Nacos config原理
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5117759.html
Copyright © 2011-2022 走看看