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

iOS 地图SDK

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

百度地图iOS SDK自v2.7.0版本起,向广大开发者提供了 .framework形式的SDK开发包,这种形式的开发包配置简单,使用方便,推荐大家使用。
手动配置.framework形式开发包
1根据需要导入 .framework包
百度地图 iOS SDK 采用分包的形式提供 .framework包,请广大开发者使用时确保各分包的版本保持一致。将所需的BaiduMapAPI_**.framework拷贝或者拖拽到工程所在文件夹下,功能包内容如下:
开发包文件 功能包内容
BaiduMapAPI_Base.framework 为基础包,使用SDK任何功能都需导入,其他分包可按需导入。
BaiduMapAPI_Map.framework 地图功能包
BaiduMapAPI_Search.framework 检索功能包
BaiduMapAPI_Cloud.framework 云检索功能包
BaiduMapAPI_Utils.framework 工具功能包
BaiduMapAPI_Radar.framework 周边雷达工具包
BaiduMapAPI_Location.framework 定位功能
thirdlibs 第三方openssl静态库用于支持https,版本v1.0.2e

添加方法如下:

左侧目录选中工程名,在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI_**.framework添加到工程中。

ios-ObjectC.png

ios-ObjectC2.png

静态库中采用Objective-C++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"
2需要引入的系统库文件

百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程需引入的系统库如下表所示:

库名称 备注
CoreLocation.framework
QuartzCore.framework
OpenGLES.framework
SystemConfiguration.framework 统计信息,用于改善产品
CoreGraphics.framework
Security.framework 是为了统计app信息使用
libsqlite3.0.tbd(xcode7以前为 libsqlite3.0.dylib) v2.9.0新增的系统库,使用v2.9.0及以上版本的地图SDK,务必增加
CoreTelephony.framework v2.9.0新增的系统库,使用v2.9.0及以上版本的地图SDK,务必增加
libstdc++.6.0.9.tbd(xcode7以前为libstdc++.6.0.9.dylib) v2.9.0新增的系统库,使用v2.9.0及以上版本的地图SDK,务必增加

添加方法: 在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。

ios-ObjectC3.png

3引入所需的第三方openssl库:

添加支持HTTPS所需的openssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)

添加方法: 在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中

4环境配置

在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC,字母O和C大写。

iso-ObjectC4.png

5引入mapapi.bundle资源文件

如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。

添加方法: 选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI_Map.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

iso-ObjectC5.png

6引入头文件

在使用SDK的类 按需 引入下边的头文件:

 #import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件
 #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件
 #import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入检索功能所有的头文件
 #import <BaiduMapAPI_Cloud/BMKCloudSearchComponent.h>//引入云检索功能所有的头文件
 #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件
 #import <BaiduMapAPI_Utils/BMKUtilsComponent.h>//引入计算工具所有的头文件
 #import <BaiduMapAPI_Radar/BMKRadarComponent.h>//引入周边雷达功能所有的头文件
 #import <BaiduMapAPI_Map/BMKMapView.h>//只引入所需的单个头文件
Hello BaiduMap
1初始化BMKMapManager

在您的AppDelegate.h文件中添加BMKMapManager的定义

@interface AppDelegate : UIResponder<UIApplicationDelegate> {   
       UINavigationController *navigationController;     
       BMKMapManager* _mapManager;    
}

在您的AppDelegate.m文件中添加对BMKMapManager的初始化,并填入您申请的授权Key,示例如下:

- (BOOL)application:(UIApplication *)application   
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       // 要使用百度地图,请先启动BaiduMapManager  
    _mapManager = [[BMKMapManager alloc]init];   
// 如果要关注网络及授权验证事件,请设定     generalDelegate参数  
    BOOL ret = [_mapManager start:@"在此处输入您的授权Key"  generalDelegate:nil];  
    if (!ret) {  
        NSLog(@"manager start failed!");  
    }  
// Add the navigation controller's view to the window and display.  
    [self.window addSubview:navigationController.view];  
    [self.window makeKeyAndVisible];  
   return YES;  
}

2创建BMKMapView

在您的ViewController.m文件中添加BMKMapView的创建代码,示例如下

- (void)viewDidLoad {  
    [super viewDidLoad];  
    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:self.view.bounds]; 
    self.view = mapView;      
}

自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate,代码如下:

-(void)viewWillAppear:(BOOL)animated    
{    
    [_mapView viewWillAppear];    
    _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放    
}    
-(void)viewWillDisappear:(BOOL)animated    
{    
    [_mapView viewWillDisappear];    
     _mapView.delegate = nil; // 不用时,置nil    
}

编译,运行,效果如下图所示:

ios-OjbectC6.png