获取室内定位
更新时间:2019年06月03日
简介
利用定位sdk,不仅可以获取室外定位的经纬度信息、周边poi信息等,也可以获取室内建筑的定位信息。
目前百度已覆盖火车站、机场、商场、客运汽车站、博物馆、综合医院、图书馆等多种场景,利用三角定位技术、增强wi-fi指纹模型技术、地磁技术、蓝牙技术等,提供精度最高可达1到3米的室内定位服务。
注:如百度未覆盖您的室内地图数据、室内店铺等信息变更第一时间更新定位信息,或其他室内图室内定位相关需求,您可以。
百度也提出了室内定位生态联盟,邀请各行各业的开发者一起联合提升室内定位精度。
使用百度定位sdk室内定位功能步骤如下:
1第一步,准备工作
在使用定位sdk进行具体开发工作之前,需获取开发密钥(ak),并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 此外,google在android 6.0中引入了动态权限获取机制,开发者在使用定位sdk之前,请详细了解关于android 6.0系统开发须知。
2第二步,初始化locationclient类
请在主线程中声明locationclient类对象,该对象初始化需传入context类型参数。推荐使用getapplicationconext()方法获取全进程有效的context。
核心代码段如下:
public locationclient mlocationclient = null; private mylocationlistener mylistener = new mylocationlistener(); //bdabstractlocationlistener为7.2版本新增的abstract类型的监听接口 //原有bdlocationlistener接口暂时同步保留。具体介绍请参考后文中的说明 public void oncreate() { mlocationclient = new locationclient(getapplicationcontext()); //声明locationclient类 mlocationclient.registerlocationlistener(mylistener); //注册监听函数 }
3第三步,配置定位sdk参数
使用百度定位sdk的室内定位功能无需特别配置,初始化过程跟使用普通定位模式是完全一样的,配置好之后,调用mlocationclient.start()即可。
因为支持百度高精度室内定位的地点是有限的,因此要想开启室内定位模式,必须先要判断哪里支持室内定位,在支持的地方开启才是有用的。
因为支持百度高精度室内定位的地点是有限的,因此要想开启室内定位模式,必须先要判断哪里支持室内定位,在支持的地方开启才是有用的。
4第四步,判断支持室内定位地点并开启室内定位模式
开发者可以通过回调的bdlocation中的getfloor()是否为空,判断当前是否已经处于室内定位区域。核心代码如下:
public locationclient mlocationclient = null; public class mylocationlistener extends bdabstractlocationlistener{ @override public void onreceivelocation(bdlocation location){ //此处的bdlocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果 if (location.getfloor() != null) { // 当前支持高精度室内定位 string buildingid = location.getbuildingid();// 百度内部建筑物id string buildingname = location.getbuildingname();// 百度内部建筑物缩写 string floor = location.getfloor();// 室内定位的楼层信息,如 f1,f2,b1,b2 mlocationclient.startindoormode();// 开启室内定位模式(重复调用也没问题),开启后,定位sdk会融合各种定位信息(gnss,wi-fi,蓝牙,传感器等)连续平滑的输出定位结果; } } }
在普通定位模式下,实际上开发者也会收到floor不为空的location结果,只不过需要调用startindoormode()方法,开启针对高精度室内定位专门优化过的定位模式,该模式开启后,可以对外输出连续、平滑的室内定位结果,极大优化用户室内定位体验与效果。
5第五步,关闭室内定位模式
调用mlocationclient.stopindoormode()方法即可。