您的位置:首页 > 移动开发 > IOS开发

01 如何将百度地图加入IOS应用程序?

2012-11-20 22:53 330 查看
O 需求
将百度地图加入到IOS应用程序中
一 准备
1)到百度官网下载 iOS SDKv1.2.2 静态库。地址如下 http://openapi.baidu.com/map/sdkiosdev-download.htm


2)将静态库引入你的工程,具体步骤如下:

引入静态库文件
百度MapAPI提供了模拟器和真机两中环境所使用的静态库文件,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下。有两种方式可以引入静态库文件:
第一种方式:直接将对应平台的.a文件拖拽至XCode工程左侧的Groups&Files中,缺点是每次在真机和模拟器编译时都需要重新添加.a文件;
第二种方式:使用lipo命令将设备和模拟器的.a合并成一个通用的.a文件,将合并后的通用.a文件拖拽至工程中即可,具体命令如下:
lipo –create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a
第三种方式:
1.将API的libs文件夹拷贝到您的Application工程跟目录下
2.在XCode的Project -> Edit Active Target -> Build -> Linking -> Other Linker Flags中添加-lbaidumapapi
3.设置静态库的链接路径,在XCode的Project -> Edit Active Target -> Build -> Search Path -> Library Search Paths中添加您的静态库目录,比如"$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)",$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator
注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"
引入mapapi.bundle资源文件
该步骤为可选,mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片。如果您不需要使用内置的图片显示功能,则可以不添加此bundle文件。您也可以根据具体需求任意替换或删除该bundle中的图片文件。
添加方式:将mapapi.bundle拷贝到您的工程目录,直接将该bundle文件托拽至XCode工程左侧的Groups&Files中即可。

引自:http://openapi.baidu.com/map/sdkiosdev-2.htm
3)引入CoreLocation.framework和QuartzCore.framework
4)为Other Linker Flags 设置-all_load属性

步骤:选中你的工程。选择右边的TARGETS->Build Settings找到Other Linker Flags

二 编码

1、在ViewController.h中添加如下代码

#import <UIKit/UIKit.h>
#import "BMapKit.h"
@interface ViewController : UIViewController<BMKGeneralDelegate>
{
BMKMapManager *_mapManager;
}
@end


在ViewController.mm中添加如下代码 (注:我的工程是将ViewController.m的后缀改为了.mm)

- (void)viewDidLoad
{
[superviewDidLoad];
// Do any additional setup after loadingthe view, typically from a nib.

//启动BMKMapManager  (加载百度地图前,必须先启动BMKMapManager)
_mapManager = [[BMKMapManageralloc]init];
BOOL ret = [_mapManagerstart:@"2772BD5CAFF652491F65707D6D5E9ABEBF3639CC"generalDelegate:self];
if (!ret) {
NSLog(@"manager start failed!");
}

//创建一张百度地图
BMKMapView* mapView = [[BMKMapViewalloc]initWithFrame:CGRectMake(0,0, 320,480)];
[self.viewaddSubview:mapView];
}


执行后,效果如下:



三 下载 ........去下载源代码咯........

四 调试

当编译不成功时,可检查如下问题

1、 是否已在项目中引入 CoreLocation.framework Quartz.framework MapKit.framework

2、 是否已将任意一个.m文件改为.mm(仅该后缀即可,不涉及其它地方)

3、 是否已为Other Linker Flags 添加-all_load属性如下图所示:



4、 检查引入的静态库类型是模拟器的还是IOS设备的,是否与当前的编译模式相同。

五 思路

六 分析

百度地图目前还在改进和更新中,大家不必太迷信它。如果在使用过程中遇到各种怪异的问题,建议先到百度地图api吧中确认以下是不是百度地图自身的Bug.

七 疑问
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: