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

简介

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

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

ios_indoor.png

坐标说明

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

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

室内图

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

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

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

具体实现如下:

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

 _mapView.baseIndoorMapEnabled = YES;
 //打开室内图

2、通过实现delegate方法,来监听进入和移出室内图事件:

 -(void)mapview:(BMKMapView *)mapView baseIndoorMapWithIn:(BOOL)flag   baseIndoorMapInfo:(BMKBaseIndoorMapInfo *)info
 {
     if (flag) {//进入室内图
        //coding...
     } else {//移出室内图
        //coding...
     }
 }

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

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

 //进行楼层切换,indoorID可通过delegate方法:- mapview:baseIndoorMapWithIn:baseIndoorMapInfo: 获取
 BMKSwitchIndoorFloorError error = [_mapView switchBaseIndoorMapFloor:@"F1" withID:indoorID];
    if (error == BMKSwitchIndoorFloorSuccess) {
        NSLog(@"切换楼层成功");
    }

室内POI检索

自v3.0版起,新增室内poi检索,支持输入关键字后,仅检索室内图内的POI。设置城市和当前建筑物后,可根据关键字,搜索某个城市或某个建筑物的室内POI。

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

新增如下内容:

室内POI检索参数信息类:BMKPoiIndoorSearchOption

室内POI搜索结果类:BMKPoiIndoorResult

室内POI信息类:BMKPoiIndoorInfo

BMKPoiSearch新增接口:

//poi室内检索
- (BOOL)poiIndoorSearch:(BMKPoiIndoorSearchOption*)option;

BMKPoiSearchDelegate新增接口:

//返回POI室内搜索结果
- (void)onGetPoiIndoorResult:(BMKPoiSearch*)searcher result:(BMKPoiIndoorResult*)poiIndoorResult errorCode:(BMKSearchErrorCode)errorCode;

室内路线规划

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

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

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

以西单大悦城的起、终点为例(IndoorDemoViewController中有详细代码):

第一步,初始化并发起检索

   //初始化检索对象
   _routeSearch = [[BMKRouteSearch alloc] init];
   //设置delegate,用于接收检索结果
   _routeSearch.delegate = self;
   //构造室内路线规划检索信息类
   BMKIndoorPlanNode* start = [[BMKIndoorPlanNode alloc]init];
   start.floor = @"F1";
   start.pt = CLLocationCoordinate2DMake(39.916634, 116.379916);
   BMKIndoorPlanNode* end = [[BMKIndoorPlanNode alloc]init];
   end.floor = @"F5";
   end.pt = CLLocationCoordinate2DMake(39.917312, 116.378919);
   BMKIndoorRoutePlanOption* indoorRouteSearchOption = [[BMKIndoorRoutePlanOption alloc]init];
   indoorRouteSearchOption.from = start;
   indoorRouteSearchOption.to = end;
   //发起检索
   BOOL flag = [_routeSearch indoorRoutePlanSearch:indoorRouteSearchOption];
   indoorRouteSearchOption = nil;
   if (flag) {
       NSLog(@"室内路线检索发送成功");
   }
   else {
       NSLog(@"室内路线检索发送失败");
   }

第二步,实现delegate方法,获取结果

/**
 *返回POI室内搜索结果
 *@param searcher 搜索对象
 *@param poiIndoorResult 搜索结果列表
 *@param errorCode 错误号,@see BMKSearchErrorCode
 */
- (void)onGetPoiIndoorResult:(BMKPoiSearch *)searcher result:(BMKPoiIndoorResult *)poiIndoorResult errorCode:(BMKSearchErrorCode)errorCode {
    NSLog(@"onGetPoiIndoorResult errorcode: %d", errorCode);
    if (errorCode == BMK_SEARCH_NO_ERROR) {
        //成功获取结果
    } else {
        //检索失败
    }
}