浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

iOS 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

自v3.0版起,百度地图SDK室内图功能正式上线,辅助开发者实现全新的地理位置服务体验,室内地图与百度地图App同步更新。 支持的公众建筑包含购物商场、机场和火车站等交通枢纽,医院等,截止2017年2月覆盖全国约4000+个大型购物中心。
显示室内图

开启室内地图后,如果可见区域内包含室内地图覆盖区域(如:王府井等知名商场),且缩放达到一定级别,便可直接在地图上看到精细室内地图效果。

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

打开室内图的代码和显示效果:

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

1.因路况、卫星图和城市热力图,仅支持20级地图数据显示,室内地图放大到22级,打开路况、卫星图或城市热力图,无相应数据显示。

2.室内图默认是关闭的,通过_mapView.baseIndoorMapEnabled 打开

showIndoorMap1.png

获取室内图信息以及实现楼层切换

对室内图进行更多的操作,包括获取室内图信息以及实现楼层切换。

获取室内图信息

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

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

室内地图图区与屏幕有交集时,还可实现楼层间地图切换,展示不同楼层的室内。

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

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

上面代码中,strFloor表示室内图楼层,格式为F1,B1… indoorID表示室内图ID;返回值BMKSwitchIndoorFloorError用于标识楼层切换错误信息,具体含义如下:

BMKSwitchIndoorFloorSuccess    切换楼层成功
BMKSwitchIndoorFloorFailed      切换楼层失败
BMKSwitchIndoorFloorNotFocused          地图还未聚焦到传入的室内图
BMKSwitchIndoorFloorNotExist           当前室内图不存在该楼层

如果您对此处的用法仍有疑惑,您可以下载官方示例代码, 参考IndoorDemo

室内POI检索

自v3.0版起,新增室内POI检索,支持检索室内地图上的POI,即输入关键字后,返回室内图内的poi的点。

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

使用室内POI检索的步骤如下:

1创建检索当前建筑物室内POI检索对象
 _search = [[BMKPoiSearch alloc] init];
2设置POI检索监听者
 _search.delegate = self;
3设置检索参数
BMKPoiIndoorSearchOption *option = [[BMKPoiIndoorSearchOption alloc] init];
    option.indoorId = _indoorMapInfoFocused.strID;  //设置室内ID(必选)
    option.keyword = _keyworkField.text;//设置室内搜索关键字
    option.pageIndex = 0;
    option.pageCapacity = 20;
4发起检索请求;
BOOL flag = [_search poiIndoorSearch:option];
    if (!flag) {
        [PromptInfo showText:@"室内检索发送失败"];
}
5实现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 {
        //检索失败
    }
}
6设置检索参数
_search.delegate = nil;
检查室内图当前状态

1.室内图默认是关闭的,检索室内POI需要打开室内图功能。

2.室内图需要显示在屏幕范围内,才支持检索当前室内图的室内POI。

室内路线规划
1初始化并发起检索
//初始化检索对象
   _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(@"室内路线检索发送失败");
   }


2实现delegate方法,获取结果
/**
 *返回室内路线搜索结果
 *@param searcher 搜索对象
 *@param result 搜索结果,类型为BMKIndoorRouteResult
 *@param error 错误号,@see BMKSearchErrorCode
 */
- (void)onGetIndoorRouteResult:(BMKRouteSearch*)searcher result:(BMKIndoorRouteResult*)result errorCode:(BMKSearchErrorCode)error
{
    NSLog(@"onGetIndoorRouteResult errorcode:%d", (int)error);
if (error == BMK_SEARCH_NO_ERROR) {
    //检索成功
    } else {
        //检索失败
}
}