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

iOS 地图SDK

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

产品简介

百度地图 iOS SDK是一套基于iOS 7.0及以上版本设备的应用程序接口。 您可以使用该套 SDK开发适用于iOS系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。

重点功能简介
  • 地图展示与交互
    简介
    地图展示:普通地图(2D,3D)、卫星图和实时交通图。开放高清4K地图显示。
    地图交互:可通过接口或手势控制来实现地图的单击、双击、长按、缩放、旋转、改变视角等操作。
    功能展示
    #import <BaiduMapAPI_Base/BMKBaseComponent.h>
    #import <BaiduMapAPI_Map/BMKMapComponent.h>
    
    //当前界面的mapView
    @property (nonatomic, strong) BMKMapView *mapView; 
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        _mapView = [[BMKMapView alloc] initWithFrame:self.view.bounds];
        //设置mapView的代理
        _mapView.delegate = self;
        //将mapView添加到当前视图中
        [self.view addSubview:_mapView];
    }
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear: animated];
        //当mapView即将被显示的时候调用,恢复之前存储的mapView状态
        [_mapView viewWillAppear];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear: animated];
        //当mapView即将被隐藏的时候调用,存储当前mapView的状态
        [_mapView viewWillDisappear];
    }
                            
    http://mapopen-pub-iossdk.cdn.bcebos.com/map/video/showMapView.mp4
  • 室内图
    简介
    自百度地图SDK V3.0版本起,室内图功能正式上线,辅助开发者实现全新的地理位置服务体验,室内地图与百度地图App同步更新;

    支持的公众建筑包含购物商场、机场和火车站等交通枢纽、医院等,覆盖全国4000+个大型购物中心。

    功能展示
    #import <BaiduMapAPI_Base/BMKBaseComponent.h>
    #import <BaiduMapAPI_Map/BMKMapComponent.h>
    
    BMKMapView *mapView = [[BMKMapView alloc] initWithFrame:self.view.bounds];
    //设置mapView的代理
    mapView.delegate = self;
    //将mapView添加到当前视图中
    [self.view addSubview:mapView];
    //设置当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化
    mapView.centerCoordinate = CLLocationCoordinate2DMake(39.917, 116.379);
    //设置地图比例尺级别
    mapView.zoomLevel = 18;
    mapView.baseIndoorMapEnabled = YES;
    mapView.showIndoorMapPoi = YES;
    
    #pragma mark - BMKMapViewDelegate
    /**
     *地图进入/移出室内图会调用此接口
     *@param mapView 地图View
     *@param flag  YES:进入室内图; NO:移出室内图
     *@param info 室内图信息
     */
    -(void)mapview:(BMKMapView *)mapView baseIndoorMapWithIn:(BOOL)flag baseIndoorMapInfo:(BMKBaseIndoorMapInfo *)info
    {
        if (flag) {
               //进入室内图
        } else {
              //移出室内图
        }
    }
                     
    http://mapopen-pub-iossdk.cdn.bcebos.com/map/video/showIndoorView.mp4
  • 海外地图
    简介
    百度地图SDK支持海外地图的展示能力,包含全球209个国家或地区详细道路、POI等数据展示。
    功能展示
    #import <BaiduMapAPI_Base/BMKBaseComponent.h>
    #import <BaiduMapAPI_Map/BMKMapComponent.h>
    
    BMKMapView *mapView = [[BMKMapView alloc] initWithFrame:self.view.bounds];
    //设置mapView的代理
    mapView.delegate = self;
    //将mapView添加到当前视图中
    [self.view addSubview:mapView];
    
    BMKMapStatus *status = [[BMKMapStatus alloc]init];
    status.fLevel = 10;
    status.targetGeoPt = CLLocationCoordinate2DMake(51.50556,-0.07556);
    [mapView setMapStatus:status withAnimation:YES withAnimationTime:1000];
    
    http://mapopen-pub-iossdk.cdn.bcebos.com/map/video/showOverseasMap.mp4
  • 地图覆盖物
    简介
    百度地图SDK支持多种地图覆盖物,帮助您展示更丰富的地图。 地图覆盖物:地图标注(Marker)、几何图形(点、折线、弧线、多边形等)、POI检索结果覆盖物、线路规划结果覆盖物等;
    功能展示
    #import <BaiduMapAPI_Base/BMKBaseComponent.h>
    #import <BaiduMapAPI_Map/BMKMapComponent.h>
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        BMKMapView *mapView = [[BMKMapView alloc] initWithFrame:self.view.bounds];
        //设置mapView的代理
        mapView.delegate = self;
        //将mapView添加到当前视图中
        [self.view addSubview:mapView];
    
        //初始化标注类BMKPointAnnotation的实例
        BMKPointAnnotation *annotation = [[BMKPointAnnotation alloc] init];
        //设置标注的经纬度坐标
        annotation.coordinate =  CLLocationCoordinate2DMake(39.915, 116.404);
        //设置标注的标题
        annotation.title = @"标注";
        //副标题
        annotation.subtitle = @"可拖拽";
        /**
         当前地图添加标注,需要实现BMKMapViewDelegate的-mapView:viewForAnnotation:方法
         来生成标注对应的View
         @param annotation 要添加的标注
         */
        [mapView addAnnotation:annotation];
    }
    
    #pragma mark - BMKMapViewDelegate
    /**
     根据anntation生成对应的annotationView
     
     @param mapView 地图View
     @param annotation 指定的标注
     @return 生成的标注View
     */
    - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation {
        if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
            /**
             根据指定标识查找一个可被复用的标注,用此方法来代替新创建一个标注,返回可被复用的标注
             */
            BMKPinAnnotationView *annotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"annotationViewIdentifier"];
            if (!annotationView) {
                /**
                 初始化并返回一个annotationView
                 
                 @param annotation 关联的annotation对象
                 @param reuseIdentifier 如果要重用view,传入一个字符串,否则设为nil,建议重用view
                 @return 初始化成功则返回annotationView,否则返回nil
                 */
                annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annotationViewIdentifier"];
                //annotationView显示的图片,默认是大头针
                //annotationView.image = nil;
                /**
                 默认情况下annotationView的中心点位于annotation的坐标位置,可以设置centerOffset改变
                 annotationView的位置,正的偏移使annotationView朝右下方移动,负的朝左上方,单位是像素
                 */
                annotationView.centerOffset = CGPointMake(0, 0);
                /**
                 默认情况下, 弹出的气泡位于annotationView正中上方,可以设置calloutOffset改变annotationView的
                 位置,正的偏移使annotationView朝右下方移动,负的朝左上方,单位是像素
                 */
                annotationView.calloutOffset = CGPointMake(0, 0);
                //是否显示3D效果,标注在地图旋转和俯视时跟随旋转、俯视,默认为NO
                annotationView.enabled3D = NO;
                //是否忽略触摸时间,默认为YES
                annotationView.enabled = YES;
                /**
                 开发者不要直接设置这个属性,若设置,需要在设置后调用BMKMapView的-(void)mapForceRefresh;方法
                 刷新地图,默认为NO,当annotationView被选中时为YES
                 */
                annotationView.selected = NO;
                //annotationView被选中时,是否显示气泡(若显示,annotation必须设置了title),默认为YES
                annotationView.canShowCallout = YES;
                /**
                 显示在气泡左侧的view(使用默认气泡时,view的width最大值为32,
                 height最大值为41,大于则使用最大值)
                 */
                annotationView.leftCalloutAccessoryView = nil;
                /**
                 显示在气泡右侧的view(使用默认气泡时,view的width最大值为32,
                 height最大值为41,大于则使用最大值)
                 */
                annotationView.rightCalloutAccessoryView = nil;
                /**
                 annotationView的颜色: BMKPinAnnotationColorRed,BMKPinAnnotationColorGreen,
                 BMKPinAnnotationColorPurple
                 */
                annotationView.pinColor = BMKPinAnnotationColorRed;
                //设置从天而降的动画效果
                annotationView.animatesDrop = YES;
                //当设为YES并实现了setCoordinate:方法时,支持将annotationView在地图上拖动
                annotationView.draggable = YES;
                //当前view的拖动状态
                //annotationView.dragState;
            }
            return annotationView;
        }
        return nil;
    }
    
    http://mapopen-pub-iossdk.cdn.bcebos.com/map/video/DrawOverlay.mp4
  • POI检索
    简介
    百度地图SDK支持周边检索、区域检索、城市内检索和POI详情信息检索。
    周边检索:以某一点为中心,指定距离为半径,根据用户输入的关键词进行POI检索;
    区域检索:在指定矩形区域内、根据关键词进行POI检索;
    城市内检索:在某一城市内,根据用户输入的关键字进行POI检索;
    POI详情信息检索:根据POI的ID信息,检索该兴趣点的详情。
    功能展示
    #import <BaiduMapAPI_Base/BMKBaseComponent.h>
    #import <BaiduMapAPI_Search/BMKSearchComponent.h>
    
    BMKSuggestionSearch *suggestionSearch = [[BMKSuggestionSearch alloc]init];
    suggestionSearch.delegate = self;
    BMKSuggestionSearchOption* suggestionOption = [[BMKSuggestionSearchOption alloc] init];
    suggestionOption.keyword = @"麦当劳";
    suggestionOption.cityname = @"北京";
    suggestionOption.cityLimit = NO;
    /**
    关键词检索,异步方法,返回结果在BMKSuggestionSearchDelegate
    的onGetSuggestionResult里
    suggestionOption sug检索信息类
    成功返回YES,否则返回NO
    */
    BOOL flag = [suggestionSearch suggestionSearch:suggestionOption];
    if(flag) {
    NSLog(@"关键词检索成功");
    } else {
    NSLog(@"关键词检索失败");
    }
    
    #pragma mark - BMKSuggestionSearchDelegate
    /**
     关键字检索结果回调
     
     @param searcher 检索对象
     @param result 关键字检索结果
     @param error 错误码,@see BMKCloudErrorCode
     */
    - (void)onGetSuggestionResult:(BMKSuggestionSearch *)searcher result:(BMKSuggestionSearchResult *)result errorCode:(BMKSearchErrorCode)error {
        
        //BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回
        if (error == BMK_SEARCH_NO_ERROR) {
            //实现对检索结果的处理
        }
    }
    
    //初始化BMKPoiSearch实例
    BMKPoiSearch *poiSearch = [[BMKPoiSearch alloc] init];
    //设置POI检索的代理
    poiSearch.delegate = self;
    //初始化请求参数类BMKNearbySearchOption的实例
    BMKPOINearbySearchOption *nearbyOption = [[BMKPOINearbySearchOption alloc]init];
    /**
    检索关键字,必选。
    在周边检索中关键字为数组类型,可以支持多个关键字并集检索,如银行和酒店。每个关键字对应数组一个元素。
    最多支持10个关键字。
    */
    nearbyOption.keywords = @[@"麦当劳"];
    //检索中心点的经纬度,必选
    nearbyOption.location = CLLocationCoordinate2DMake(40.056974, 116.307689);
    /**
    检索半径,单位是米。
    当半径过大,超过中心点所在城市边界时,会变为城市范围检索,检索范围为中心点所在城市
    */
    nearbyOption.radius = 1000;
    /**
    根据中心点、半径和检索词发起周边检索:异步方法,返回结果在BMKPoiSearchDelegate
    的onGetPoiResult里
    
    nearbyOption 周边搜索的搜索参数类
    成功返回YES,否则返回NO
    */
    BOOL flag = [poiSearch poiSearchNearBy:nearbyOption];
    if(flag) {
    NSLog(@"POI周边检索成功");
    } else {
    NSLog(@"POI周边检索失败");
    }
    
    #pragma mark - BMKPoiSearchDelegate
    /**
     POI检索返回结果回调
     
     @param searcher 检索对象
     @param poiResult POI检索结果列表
     @param error 错误码
     */
    - (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPOISearchResult *)poiResult errorCode:(BMKSearchErrorCode)error {
    //BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回
    if (error == BMK_SEARCH_NO_ERROR) {
            //实现对检索结果的处理
        }
    }
    
    http://mapopen-pub-iossdk.cdn.bcebos.com/map/video/searchMap.mp4
  • 路线规划
    简介
    百度地图SDK支持公交、驾车、骑行、步行和跨城公共交通路线规划。
    公交路线规划:根据起、终点,进行公交路线规划;
    驾车线路规划:根据起、终点,不同的策略,进行驾车路线规划,支持设置途经点;
    骑行线路规划:根据起、终点,进行自行车骑行路线规划,支持跨城骑行路线规划;
    步行线路规划:根据起、终点,进行步行路线规划;
    跨城公共交通路线规划:根据起、终点,进行跨城路线规划,支持飞机,火车、大巴、公交等多种出行方案。
    功能展示
    #import <BaiduMapAPI_Base/BMKBaseComponent.h>
    #import <BaiduMapAPI_Search/BMKSearchComponent.h>
    
    //初始化BMKRouteSearch实例
    BMKRouteSearch *drivingRouteSearch = [[BMKRouteSearch alloc]init];
    //设置驾车路径的规划
    drivingRouteSearch.delegate = self;
    BMKDrivingRoutePlanOption *drivingRoutePlanOption = [[BMKDrivingRoutePlanOption alloc] init];
    //实例化线路检索节点信息类对象
    BMKPlanNode *start = [[BMKPlanNode alloc]init];
    //起点名称
    start.name = @"天安门";
    //起点所在城市
    start.cityName = @"北京";
    //实例化线路检索节点信息类对象
    BMKPlanNode *end = [[BMKPlanNode alloc]init];
    //终点名称
    end.name = @"百度科技园";
    //终点所在城市
    end.cityName = @"北京市";
    //检索的起点,可通过关键字、坐标两种方式指定。cityName和cityID同时指定时,优先使用cityID
    drivingRoutePlanOption.from = start;
    //检索的终点,可通过关键字、坐标两种方式指定。cityName和cityID同时指定时,优先使用cityID
    drivingRoutePlanOption.to = end;
    NSMutableArray * wayPointsArray = [[NSMutableArray alloc] initWithCapacity:1];
    BMKPlanNode* wayPointItem = [[BMKPlanNode alloc]init];
    wayPointItem.cityName = @"北京市";
    wayPointItem.name = @"西二旗地铁站";
    [wayPointsArray addObject:wayPointItem];
    drivingRoutePlanOption.wayPointsArray = wayPointsArray;
    /**
    发起驾乘路线检索请求,异步函数,返回结果在BMKRouteSearchDelegate的onGetDrivingRouteResult中
    */
    BOOL flag = [drivingRouteSearch drivingSearch: drivingRoutePlanOption];
    if(flag) {
    NSLog(@"驾车检索成功");
    } else {
    NSLog(@"驾车检索失败");
    }
    
    
    #pragma mark - BMKRouteSearchDelegate
    /**
    *返回驾乘搜索结果
    *@param searcher 搜索对象
    *@param result 搜索结果,类型为BMKDrivingRouteResult
    *@param error 错误号,@see BMKSearchErrorCode
    */
    - (void)onGetDrivingRouteResult:(BMKRouteSearch*)searcher result:(BMKDrivingRouteResult*)result errorCode:(BMKSearchErrorCode)error{
    //BMKSearchErrorCode错误码,BMK_SEARCH_NO_ERROR:检索结果正常返回
    if (error == BMK_SEARCH_NO_ERROR) {
    //实现对检索结果的处理
    }
    }
                                
    http://mapopen-pub-iossdk.cdn.bcebos.com/map/video/RouteSearch.mp4
  • 步行导航
    简介
    V4.2.0 新增步行导航功能,支持普通步行导航、步行AR导航、偏航纠偏等导航功能。
    功能展示
    #import <BaiduMapAPI_Map_For_WalkNavi/BMKMapComponent.h>
    #import <BaiduMapAPI_WalkNavi/BMKWalkNaviComponent.h>
    
    @property (nonatomic, strong) BMKWalkNaviViewController *controller;   ///导航页面
    
    _controller = [[BMKWalkNaviViewController alloc] init];
    BOOL inited = [[BMKWalkNavigationManager sharedManager] initNaviEngine:_controller];
    [BMKWalkNavigationManager sharedManager].routePlanDelegate = self;
    [BMKWalkNavigationManager sharedManager].routeGuidanceDelegate = self;
    [BMKWalkNavigationManager sharedManager].ttsPlayerDelegate = self;
        
    if (inited) {
        NSLog(@"SDK-初始化引擎成功");
        BMKWalkNaviLaunchParam *param = [[BMKWalkNaviLaunchParam alloc] init];
        param.startPoint = CLLocationCoordinate2DMake(40.049879,116.279853);//起点坐标,百度科技园;
        param.endPoint = CLLocationCoordinate2DMake(40.058918,116.312621); //终点坐标,西二旗地铁站;
        [[BMKWalkNavigationManager sharedManager] routePlanWithParams:param];
     }
    
    #pragma mark - BMKWalkCycleRoutePlanDelegate
    /**
     开始算路
     */
    - (void)onRoutePlanStart:(BMKWalkCycleNavigationType)naviType {
        NSLog(@"SDK-开始算路");
    }
    
    - (void)onRoutePlanResult:(BMKWalkCycleRoutePlanErrorCode)errorCode naviType:(BMKWalkCycleNavigationType)naviType{
        if (errorCode == BMK_WALK_CYCLE_ROUTEPLAN_RESULT_SUCCESS) {
            NSLog(@"SDK-算路成功");
            _controller.navigationType = 0;
            [self.navigationController pushViewController:_controller animated:YES];
        } else {
            NSLog(@"SDK-算路失败");
        }
    }
    
    //BMKWalkNaviViewController
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        self.navigationController.navigationBarHidden = YES;
         [[BMKWalkNavigationManager sharedManager] resume];
         [[BMKWalkNavigationManager sharedManager] startWalkNavi:BMK_WALK_NAVIGATION_MODE_WALK_NORMAL];//BMK_WALK_NAVIGATION_MODE_WALK_AR
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        self.navigationController.navigationBarHidden = NO;
        [BMKWalkNavigationManager destroy];
    }
                                
    http://mapopen-pub-iossdk.cdn.bcebos.com/map/video/WalkARNav.mp4
  • 骑行导航
    简介
    V4.2.0 新增骑行导航功能,支持普通自行车骑行导航和电动车骑行导航、偏航纠偏等导航功能。
    功能展示
    //BMKWalkRoutePlanController
    #import <BaiduMapAPI_Map_For_WalkNavi/BMKMapComponent.h>
    #import <BaiduMapAPI_WalkNavi/BMKWalkNaviComponent.h>
    
    @property (nonatomic, strong) BMKWalkNaviViewController *controller;   ///导航页面
    
    BMKWalkCycleNavigationDisplayOption *naviOption = [[BMKWalkCycleNavigationDisplayOption alloc] init];
    _controller = [[BMKWalkNaviViewController alloc] init];
    BOOL inited = [[BMKCycleNavigationManager sharedManager] initNaviEngine:_controller option:naviOption];
    [BMKCycleNavigationManager sharedManager].routePlanDelegate = self;
    [BMKCycleNavigationManager sharedManager].routeGuidanceDelegate = self;
    [BMKCycleNavigationManager sharedManager].ttsPlayerDelegate = self;
    if (inited) {
        NSLog(@"SDK-初始化引擎成功");
        BMKCycleNaviLaunchParam *param = [[BMKCycleNaviLaunchParam alloc] init];
        param.startPoint = CLLocationCoordinate2DMake(40.049879,116.279853);//起点坐标,百度科技园;
        param.endPoint = CLLocationCoordinate2DMake(40.058918,116.312621); //终点坐标,西二旗地铁站;
        param.naviType = BMK_WALK_CYCLE_NAVIGATION_TYPE_ELECTRIC_CYCLE;
        [[BMKCycleNavigationManager sharedManager] routePlanWithParams:param];
    }
    
    #pragma mark - BMKWalkCycleRoutePlanDelegate
    /**
     开始算路
     */
    - (void)onRoutePlanStart:(BMKWalkCycleNavigationType)naviType {
        NSLog(@"SDK-开始算路");
    }
    
    - (void)onRoutePlanResult:(BMKWalkCycleRoutePlanErrorCode)errorCode naviType:(BMKWalkCycleNavigationType)naviType{
        if (errorCode == BMK_WALK_CYCLE_ROUTEPLAN_RESULT_SUCCESS) {
            NSLog(@"SDK-算路成功");
            _controller.navigationType = 1;
            [self.navigationController pushViewController:_controller animated:YES];
        } else {
            NSLog(@"SDK-算路失败");
        }
    }
    
    //BMKWalkNaviViewController
    
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        self.navigationController.navigationBarHidden = YES;
        [[BMKCycleNavigationManager sharedManager] resume];
        [[BMKCycleNavigationManager sharedManager] startCycleNavi];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        self.navigationController.navigationBarHidden = NO;
        [BMKCycleNavigationManager destroy];
    }
                                
    http://mapopen-pub-iossdk.cdn.bcebos.com/map/video/RidingNav.mp4
使用须知

该套地图SDK免费对外开放,接口使用无次数限制。在使用前,您需先申请密钥(AK)才可使用。在您使用百度地图SDK之前,请先阅读百度地图API使用条款。 百度地图iOS SDK是提供给具有一定iOS编程经验和了解面向对象概念的开发者使用。此外,读者还应该对地图的基本知识有一定的了解。您在使用中遇到任何问题,都可以通过反馈平台反馈给我们,之后会有技术支持人员一对一为您处理问题。
为提升开发者接入体验,地图SDK对文档内容进行了优化升级,优化后的新版文档将在12.21日之后陆续上线,如开发者希望继续查看旧版本文档,请于12.21之前对内容进行本地保存,如有其他问题,欢迎通过反馈平台与我们取得联系。

开始使用