百度API———地图定位(一)*
来源:互联网 发布:阿里云干嘛用的 编辑:程序博客网 时间:2024/06/06 02:39
百度AIP地址
百度定位SDK
一、定位策略
混合GPS+基站+WiFi定位,百度地图定位SDK会根据环境自动调整定位策略。
1. 高精度模式定位策略:这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果
2. 低功耗模式定位策略:该定位模式下,不会使用GPS,只会使用网络定位(Wi-Fi和基站定位)
3. 仅用设备模式定位策略:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位
二、做定位的思路
- 获取定位后的位置信息(百度地图有获取当前位置信息的API)
- 把定位信息加载到地图上
三、尝试做第一个定位
(1)准备工作
- 申请key,这个就不多说了
- 下载相关jar包,和对应的.so文件(BaiduLBS_Android.jar)
(2)关键类
(3)代码
》》关于定位设置、启动
/** * 初始化百度地图 */ private void initMap() { /* 百度地图:下面的是定位相关代码 LocationClientOption配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等 */ LocationClientOption mLocationClientOption = new LocationClientOption(); mLocationClientOption.setCoorType("bd09ll");// 设置坐标类型 mLocationClientOption.setIsNeedAddress(true);// 设置是否需要地址信息,默认为无地址 mLocationClientOption.setOpenGps(true);// 设置是否打开gps进行定位 mLocationClientOption.setScanSpan(5000);// 设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效 /* LocationClient定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动 */ LocationClient mLocationClient = new LocationClient(context, mLocationClientOption);// 设置入LocationClient /* 开始定位 */ MyBDLocationListener mBDLocationListener = new MyBDLocationListener();// 获取监听对象(MyBDLocationListener是实现了BDLocationListener接口的类) mLocationClient.registerLocationListener(mBDLocationListener);// 注册定位监听函数 mLocationClient.start();// 启动定位sdk }
》》关于定位回调接口的实现,BDLocationListener
/** * 实现定位请求回调接口 */ private class MyBDLocationListener implements BDLocationListener { /** * 发生定位时的回调方法 * * @param bdLocation 百度坐标类,内部封装了如经纬度、半径等属性信息 */ @Override public void onReceiveLocation(BDLocation bdLocation) { /* 百度地图:下面是根据定位信息,落实到地图相关的代码,以及百度地图界面相关配置 */ BaiduMap mBaiduMap = map_view.getMap();// 地图对象的操作方法与接口 mBaiduMap.setMyLocationEnabled(true);// 开启定位图层 MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.zoomTo(18.0f);// 设置初始缩放级别 mBaiduMap.setMapStatus(mMapStatusUpdate);// 改变地图状态 /* MyLocationData定位数据对象 */ MyLocationData mLocationData = new MyLocationData.Builder() .accuracy(1)// 定位精度 .direction(bdLocation.getDirection())// GPS定位时方向角度,顺时针0-360 .latitude(bdLocation.getLatitude())//百度纬度坐标 .longitude(bdLocation.getLongitude())//百度经度坐标 .build();// 设置相关显示数据 mBaiduMap.setMyLocationData(mLocationData);// 把定位数据设置到BaiduMap对象 BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory.fromResource(R.mipmap.icon_car); BitmapDescriptor mFriendMarker = BitmapDescriptorFactory.fromResource(R.mipmap.icon_friend_point); /* MyLocationConfiguration配置定位图层显示方式 可以设置精度圈填充颜色、精度圈边框颜色、用户自定义定位图标、是否允许显示方向信息、定位图层显示方式 */ MyLocationConfiguration mLocationConfiguration = new MyLocationConfiguration( MyLocationConfiguration.LocationMode.COMPASS, true, mCurrentMarker); mBaiduMap.setMyLocationConfigeration(mLocationConfiguration);// 把定位图层显示方式设置到BaiduMap对象 } }
四、一些问题
- 目前没有接口限制,但不支持多线程并发访问。
- 百度定位SDK可以返回三种坐标系,分别是bd09, bd09ll和gcj02,其中bd09ll能无偏差地显示在百度地图上。
- 百度地图api中采用两种坐标体系,经纬度坐标系和墨卡托投影坐标系。
以下是遇到的坑,只能描述一些表现
- 死活出不来,没有报错,就是闪退,可能就是BDLocation为null
- Android6.0新特性,有些权限不能配置,需要手动申请。》》解决办法
- 百度地图4.9E-324,error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324》》这个报错,只能说明一件事,定位信息没拿到。原因很多,需要分析,说几个:
1.可能是key的问题
2.可能是缺少权限问题,参照上一问题去分析
3.也可能是当前定位条件真的不行,可以到空旷的地域去测试
4.可能是.so文件没导入成功,可以仿照Baidu的Demo去放.so文件并在Gradle中配置好。
0 0
- 百度API———地图定位(一)*
- 百度地图开发(一)——地图定位
- 第三方平台--百度地图API——定位
- 百度API———基础地图(一)*
- 百度地图 API 基础入门——前端(一)
- 百度地图API学习笔记(一) 实现实时定位
- 百度地图——定位
- 通过百度地图API定位--第三方开源--百度地图(一)
- 【百度地图API】建立全国银行位置查询系统(一)——如何创建地图
- 【百度地图API】建立全国银行位置查询系统(一)——如何创建地图
- (一)Android百度公交开发—如何在Android应用中使用百度地图api
- 百度地图API应用之——利用定位SDK和地图SDK来进行定位和显示当前位置
- 百度地图学习(一)——为什么选择百度地图API?为何天朝下的生活总是这么丰富多彩?
- 百度地图API(一)
- Android百度地图——定位SDK(版本v3.1)(一)
- 百度地图API入门——(5)百度地图API的简介
- Arcgis for Androd API开发系列教程(一)——地图显示与GPS定位
- Android调用百度地图API实现——实时定位代码
- 【ORACLE】执行计划--Get && Look
- iOS 遍历未知对象的属性和方法
- Filter(过滤器)学习
- Handler.obtainMessage()
- Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
- 百度API———地图定位(一)*
- Packet frame 长度分析基于抓包器
- 折半查找(二分查找)实现
- iOS中的堆(heap)和栈(stack)的理解
- Hook应用
- 回文串
- ios用Protocol Buffers遇到的坑
- 用Handler的post()方法来传递线程中的代码段到主线程中执行
- 微软、腾讯、头条、清北专家解析机器学习的局限与明天