室内高精度定位
功能场景
本示例展示了在百度地图室内图覆盖的场所中如何获取精准的室内定位信息。
Android
//mapopen-website-wiki.bj.bcebos.com/demos/室内定位.mp4
1590746640|//mapopen-website-wiki.bj.bcebos.com/demos/newqrcodes/室内定位.png
扫码体验
使用产品
Android定位SDK|/index.php?title=android-locsdk
>
室内定位|/index.php?title=android-locsdk/guide/get-location/indoors
下载源码
//mapopen-website-wiki.bj.bcebos.com/demos/location/IndoorLocationDemo.zip
核心接口
类
接口
描述
备注
BaiduMap
setIndoorEnable(boolean enabled)
设置是否显示室内图, 默认室内图不显示 室内图只有在缩放级别[17, 22]范围才生效,但是在18级之上(包含18级)才会有楼层边条显示。
地图SDK
BaiduMap
setOnBaseIndoorMapListener(BaiduMap.OnBaseIndoorMapListener listener)
设置室内图模式监听者
地图SDK
OnBaseIndoorMapListener
onBaseIndoorMapMode(boolean in, MapBaseIndoorMapInfo info)
地图进入室内图模式回调函数,in:是否进入室内图模式,info :室内图信息
地图SDK
LocationClient
startIndoorMode()
打开室内定位模式,该模式下会加快定位速度并输出连续室内定位结果;当BDLocation.getFloor() != null时,表明该区域已经支持室内定位,开发者可以尝试调用该接口,体验高精度室内定位功能
定位SDK
LocationClient
stopIndoorMode()
关闭室内定位模式
定位SDK
LocationClient
BDAbstractLocationListener
监听定位结果回调函数
定位SDK
核心代码
1.设置地图进入室内图模式回调函数
JAVA
BaiduMap.OnBaseIndoorMapListener onBaseIndoorMapListener = new BaiduMap.OnBaseIndoorMapListener() { @Override public void onBaseIndoorMapMode(boolean b, MapBaseIndoorMapInfo mapBaseIndoorMapInfo) { // 设置楼层数据 mFloorListAdapter.setmFloorList(mapBaseIndoorMapInfo.getFloors()); mStripListView.setVisibility(View.VISIBLE); mStripListView.setStripAdapter(mFloorListAdapter); mMapBaseIndoorMapInfo = mapBaseIndoorMapInfo; } };
复制
深色
复制成功
2.开启室内定位图层设置室内图模式监听
JAVA
mBaiduMap = mMapView.getMap(); // 设置是否显示室内图, 默认室内图不显示 mBaiduMap.setIndoorEnable(true); // 设置室内图模式监听 mBaiduMap.setOnBaseIndoorMapListener(onBaseIndoorMapListener);
复制
深色
复制成功
3.开启室内定位模式
JAVA
/** * 定位SDK监听函数 */ public class MyLocationListenner extends BDAbstractLocationListener { private String lastFloor = null; @Override public void onReceiveLocation(BDLocation location) { // map view 销毁后不在处理新接收的位置 if (location == null || mMapView == null) { return; } String bid = location.getBuildingID(); if (bid != null && mMapBaseIndoorMapInfo != null) { // 校验是否满足室内定位模式开启条件 if (bid.equals(mMapBaseIndoorMapInfo.getID())) { // 楼层 String floor = location.getFloor().toUpperCase(); boolean needUpdateFloor = true; if (lastFloor == null) { lastFloor = floor; } else { if (lastFloor.equals(floor)) { needUpdateFloor = false; } else { lastFloor = floor; } } if (needUpdateFloor) { // 切换楼层 mBaiduMap.switchBaseIndoorMapFloor(floor, mMapBaseIndoorMapInfo.getID()); mFloorListAdapter.setSelectedPostion(mFloorListAdapter.getPosition(floor)); mFloorListAdapter.notifyDataSetInvalidated(); } if (!location.isIndoorLocMode()) { // 开启室内定位模式,只有支持室内定位功能的定位SDK版本才能调用该接口 mLocationClient.startIndoorMode(); } } }
复制
深色
复制成功