您当前的位置: Android SDK > 开发指南 > 室内地图
室内地图

简介

自v4.0版起,百度地图SDK室内图功能正式上线,辅助开发者实现全新的地理位置服务体验,室内地图与百度地图App同步更新。

支持的公众建筑包含购物商场、机场和火车站等交通枢纽,医院等,覆盖全国约600个大型购物中心,覆盖类型和城市还在持续增加中。

android_indoor.png

坐标说明

百度地图SDK接口和返回内容的坐标目前仅支持百度BD09坐标,如果您使用的是GPS WGS84坐标或国测局GCJ02坐标,需要将WGS84坐标或GCJ02坐标转换为BD09坐标。

相应的接口和转换方法请参考坐标转换请勿使用非官方的转换方法。

室内图

仅室内图区域与显示屏幕有交集时,最大支持22级地图缩放;室内图区域与显示屏幕无交集时,基础地图支持最大缩放到21级。

注意:因路况、卫星图仅支持20级地图数据显示,室内地图放大到22级,打开路况、卫星图可能无相应数据显示。

此功能位于 “基础地图(Map)”这个功能模块,开发者使用时请注意选择。

具体实现如下:

1、室内图是默认关闭的,打开室内图的代码如下:

mBaiduMap.setIndoorEnable(true); // 打开室内图

2、通过设置室内图监听事件来监听进入和移出室内图:

mBaiduMap.setOnBaseIndoorMapListener(new BaiduMap.OnBaseIndoorMapListener() {
    @Override
    public void onBaseIndoorMapMode(boolean b, MapBaseIndoorMapInfo mapBaseIndoorMapInfo) {
        if (b) {
            // 进入室内图
            // 通过获取回调参数 mapBaseIndoorMapInfo 来获取室内图信息,包含楼层信息,室内ID等
        } else {
            // 移除室内图
        }
    }
});

3、室内地图图区与屏幕有交集时,还可实现楼层间地图切换。

可以通过BaiduMap提供的接口,展示不同楼层的室内图,代码如下:

SwitchFloorError switchFloorError =  mBaiduMap.switchBaseIndoorMapFloor(floor, mMapBaseIndoorMapInfo.getID()); // 切换楼层信息
 
switch (switchFloorError) {
    case SwitchFloorError.SWITCH_OK:
        // 切换成功
        break;
    case SwitchFloorError.FLOOR_INFO_ERROR:
        // 切换楼层, 室内ID信息错误
        break;
    case SwitchFloorError.FLOOR_OVERLFLOW:
        // 切换楼层室内ID与当前聚焦室内ID不匹配
        break;
    case SwitchFloorError.FOCUSED_ID_ERROR:
        // 切换楼层室内ID与当前聚焦室内ID不匹配
        break;
    case SwitchFloorError.SWITCH_ERROR:
        // 切换楼层错误
        break;
    default:
        break;
}

室内POI检索

自v4.0版起,新增室内poi检索,支持检索室内地图上的poi,即输入关键字后,仅返回室内图内的poi的点,可以设置城市和当前建筑物。

此功能位于 “检索(Search)”这个功能模块,开发者使用时请注意选择。

支持按照tag分类检索

第一步,创建检索当前建筑物室内poi检索对象

mPoiSearch = PoiSearch.newInstance();

第二步,设置POI检索监听者;

mPoiSearch.setOnGetPoiSearchResultListener(this);

第三步,发起检索请求;

PoiIndoorOption option = new PoiIndoorOption().poiIndoorBid(
       indoorInfo.getID()).poiIndoorWd(searchContent.getText().toString());
mPoiSearch.searchPoiIndoor( option);

第五步,释放POI检索实例;

mPoiSearch.destroy();

室内路线规划

自v4.1版起,新增室内线路规划,目前仅支持检索起点、终点坐标在同一室内图上的线路规划,即仅支持同一商场,不支持两个不同的商场内的起、终点。

此功能位于“检索模块(search)”这个功能模块,Demo写在map/indoorMap中,开发者使用时请注意选择。

目前室内线路规划仅支持部分商场和交通枢纽,但支持的商场和交通枢纽还是不断的扩充中,如希望开发某些商场应用,请提前Demo更改为对应商场验证,有返回结果,即为支持。

以西单大悦城的起、终点为例,indoorMap Demo中有详细代码.

第一步,创建室内线路规划检索实例;

 mSearch = RoutePlanSearch.newInstance();

第二步,创建室内线路规划检索监听者;

OnGetRoutePlanResultListener routeListener = new OnGetRoutePlanResultListener()   {
   @Override
   public void onGetIndoorRouteResult(IndoorRouteResult result) {
       //获取室内线路规划检索结果
   }
}

第三步,设置室内线路规划检索监听者;

mSearch.setOnGetRoutePlanResultListener( routeListener );

第四步,准备检索起、终点信息;

IndoorPlanNode startNode = new IndoorPlanNode(new LatLng(39.917380, 116.37978), "F1");
IndoorPlanNode endNode = new IndoorPlanNode(new LatLng(39.917239, 116.37955), "F6");
IndoorRoutePlanOption irpo = new IndoorRoutePlanOption().from(startNode).to(endNode);

第五步,发起室内线路规划检索;

mSearch.walkingIndoorSearch(irpo);

第六步,释放检索实例

mSearch.destroy();