iOS地图SDK
重要:为进一步采取加强对最终用户个人信息的安全保护措施,从地图SDK v6.5.1版本起,请开发者务必确保调用SDK任何接口前先调用隐私合规接口setAgreePrivacy,否则可能会无法正常使用相关功能。具体可参考开发指南-开发注意事项-隐私政策接口说明。
产品简介
百度地图 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支持境外地图的展示能力,包含全球200多个国家和地区的详细道路、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
用户须知
在您使用百度iOS地图SDK之前,请先阅读并同意百度地图开放平台服务条款中的各项内容,并申请申请密钥(AK)才可使用。
您在使用中遇到任何问题,都可以通过反馈平台反馈给我们,之后会有技术支持人员一对一为您处理问题。
免费说明
目前百度地图iOS地图SDK境内服务对非商业目的使用的开发者不收取任何费用,开发者可自行下载放心使用。
如您以商业目的(包括但不限于对第三方用户收费、项目投标,以及其他直接或间接获取收益或利益)使用本平台服务,则用户须要事先获得本平台"商用授权"许可。 平台商用授权的授权对象为公司主体。授权成功后,您将会收到平台提供的书面版商用授权书(附带百度公司签章)。
商用授权可点击这里了解详情。商业目的产品使用前请参考使用须知。
开始使用