当前位置: 首页 > news >正文

百度地图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:\n  纬度: " + location.latitude
									+ "\n  经度: " + 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)进行反注冊就可以。


转载于:https://www.cnblogs.com/gcczhongduan/p/5117759.html

相关文章:

  • 既然选择了远方,就只顾风雨兼程!
  • CMake入门(二)
  • 第六章 移动自动化测试工程的开展(上)
  • kafka消息监控-KafkaOffsetMonitor
  • java Graphics2D 画图
  • Linux学习之给指定用户发邮件
  • PHP的学习--生成器Generators
  • 20160115学习日志
  • C#基础回顾(三)—索引器、委托、反射
  • UltraEdit 脚本 实现查找替换
  • Jan 17 - Permutations II; BackTracking; Array;
  • LLDB 打印 frame
  • JS魔法堂:再识Bitwise Operation Bitwise Shift
  • 菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t
  • 改善Chrome在Windows下的中文字体效果
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 2017 年终总结 —— 在路上
  • 2017年终总结、随想
  • 30秒的PHP代码片段(1)数组 - Array
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • mockjs让前端开发独立于后端
  • PAT A1050
  • Yii源码解读-服务定位器(Service Locator)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 排序算法学习笔记
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 提醒我喝水chrome插件开发指南
  • 写代码的正确姿势
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 7行Python代码的人脸识别
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​什么是bug?bug的源头在哪里?
  • (16)Reactor的测试——响应式Spring的道法术器
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (C#)获取字符编码的类
  • (Note)C++中的继承方式
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Windows2003安全设置/维护
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .chm格式文件如何阅读
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Micro Framework 4.2 beta 源码探析
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /usr/bin/env: node: No such file or directory
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ajaxupload] - 上传文件同时附件参数值
  • [BetterExplained]书写是为了更好的思考(转载)