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

重要:为进一步采取加强对最终用户个人信息的安全保护措施,从地图SDK v6.5.1版本起,请开发者务必确保调用SDK任何接口前先调用隐私合规接口setAgreePrivacy,否则可能会无法正常使用相关功能。具体可参考开发指南-开发注意事项-隐私政策接口说明。

产品简介
iOS地图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];
}
室内图
简介
自百度地图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 {
//移出室内图
}
}
境外地图
简介
百度地图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];
地图覆盖物
简介
百度地图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;
}
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) {
//实现对检索结果的处理
}
}
路线规划
简介
百度地图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) {
//实现对检索结果的处理
}
}
步行导航
简介
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];
}
骑行导航
简介
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];
}
用户须知
在您使用百度iOS地图SDK之前,请先阅读并同意百度地图开放平台服务条款中的各项内容,并申请密钥(AK)才可使用。
您在使用中遇到任何问题,都可以通过反馈平台反馈给我们,之后会有技术支持人员一对一为您处理问题。
免费说明
目前百度地图iOS地图SDK境内服务对非商业目的使用的开发者不收取任何费用,开发者可自行下载放心使用。
如您以商业目的(包括但不限于对第三方用户收费、项目投标,以及其他直接或间接获取收益或利益)使用本平台服务,则用户须要事先获得本平台"商用授权"许可。 平台商用授权的授权对象为公司主体。授权成功后,您将会收到平台提供的书面版商用授权书(附带百度公司签章)。
商用授权可点击这里了解详情。商业目的产品使用前请参考使用须知

下一篇

获取密钥

本篇文章对您是否有帮助?