一、百度地图简介
百度地图iOS SDK是一套基于armv7及armv7s处理器设备的应用程序接口,不仅提供构建地图的基本接口,还提供本地搜索、路线规划、定位等服务,自v2.0.0开始为矢量渲染的3D地图,并新增了矢量离线地图下载功能接口。
您可以使用百度地图iOS SDK开发适用于移动设备的地图应用,通过接口,您可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序。百度地图iOS SDK提供的功能如下:
地图:提供地图展示和地图操作功能;
POI检索:支持周边检索、区域检索和城市内兴趣点检索;
地理编码:提供经纬度和地址信息相互转化的功能接口;
线路规划:支持公交、驾车、步行三种方式的线路规划;
覆盖物图层:支持在地图上添加覆盖物,展示更丰富的LBS信息;
定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式);
离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果;
导航:支持调启百度地图客户端导航和调启Web页面导航(H5导航);
LBS云检索:支持查询存储在LBS云内的自有数据;
特色功能:短串分享(将POI搜索结果或反地理编码结果生成短串, 用户点击该链接可打开百度地图客户端查看相应信息);
用户在使用SDK之前需要获取百度地图移动版开发密钥(Key),该key与你的百度账户相关联。
您必须先有百度帐户,才能获得key。并且,该key与您引用SDK的程序包名有关,具体流程请参照申请密钥。请妥善保存Key,地图初始化时需要用到Key。
注意:
1. 为了给用户提供更优质的服务,iOS SDK自v2.0.2版本开始采用了全新的Key验证体系。因此,当您选择使用v2.0.2及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请;
2. 新、旧Key之间不可通用,即新Key只可以使用在v2.0.2及后续版本的SDK中,旧的Key只适用于v2.0.1及之前版本的SDK。旧的Key服务会长期保留,请用户放心使用。
申请密钥
百度地图iOS SDK开发密钥的申请地址为:http://lbsyun.baidu.com/apiconsole/key
申请步骤如下:
第一步:打开API控制台,如下图所示:
第二步:点击创建应用,开始申请开发密钥,如下图:
第三步:填写应用名称、应用类型注意选择“for mobile”、正确填写安全码,点击确认,系统将会自动帮您生成相应的开发密钥,如下图所示:
第四步:上图中的“访问应用(ak)”就是您在开发过程中需要用到的开发密钥,请妥善保管。
注:密钥被删除后,对应程序中的SDK功能将不可用。误删的ak可以从回收站中找回。
安全码简介
在申请开发密钥的时候,需要填写对应工程的安全码。这里的安全码指的是该应用的Bundle Identifier,获取方式如下: Xcode切换到Summary标签查看Bundle Identifier
如下图示:
二、在项目中使用百度地图
1 打开xcode,新建一个demo工程(或是在你现有的工程下),创建好后把下载的的inc,libs,mapapi.bundle三个文件夹导入到工程内,注意需要copy+destination,看我如下截图:
一定要勾选copy和create group 同时要添加到target。
2 几乎所有的第三方地图sdk都是依赖于apple自有的几个framework,所以这一步需要我们导入:CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework。 添加方式:右键点击Xcode工程左侧的Frameworks文件夹,add->Existing Frameworks,在弹出窗口中选中这几个framework,点击add即可。导入方法如下:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
此时如果.h导入BMapKit.h头文件,实例化BMKMapManager或是BMapView,一定会有如下的错误:
貌似提示:libbaidumapapi.a找不到,那么是路径的问题么?这就是大家常遇到的BMKMapManager错误。其实原理是系统无法链接到我们的地图静态库,解决办法如下文:
选中工程,target,切换到Build Setting标签,定位到other link flag,
输入:-all_load
3 现在需要设置一下链接库的环境变量,好让项目能顺利找到目录下的.a文件,选中工程,target,切换到build setting标签,定位到Library search Path ,如下图所示:
删除已有的三个,添加一个足矣(模拟器+真机):$(SRCROOT)/libs/Release$(EFFECTIVE_PLATFORM_NAME)
简单解释一下:
$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator,
4 这个时候,静态库文件已经设置完毕,剩下的就只有代码工作了,由于需要key的验证,所以我们先需要使用BMKMapManager类,配置申请到的key,以得到授权。选中AppDelegate.h
#import <UIKit/UIKit.h>
@interface QQAppDelegate :UIResponder <UIApplicationDelegate>
@property (retain,nonatomic)BMKMapManager *mapMagger;
@end
在AppDelegate.mm中的didFinishLaunchingWithOptions,加入如下代码:
//使用百度地图,先启动BMKMapManager
_mapMagger = [[BMKMapManageralloc]init];
// 如果要关注网络及授权验证事件,请设定generalDelegate参数
BOOL ret = [_mapMaggerstart:@"请在此处输入key值"generalDelegate:nil];
if(!ret)
{
NSLog(@"manger starts failed@");
}
7、在需要显示地图的类里导入BMKMapView.h后,实例化BMKMapView类。在viewDidLoad里添加代码:
//初始化地图
self.mapView = [[BMKMapViewalloc]initWithFrame:CGRectMake(0,30,self.view.frame.size.width,400)];
//地图显示比例尺,默认位置在地图左下方
//设置地图类型
self.mapView.mapType = BMKMapTypeStandard;
[self.viewaddSubview:self.mapView];
5 在AppDelegate中授权过后,可以随意在任意的Viewcontroller中使用Mapview了。
(当然,BMKMapManager授权也可以写到任意的ViewController中,但是这样的话,只能在这个ViewController中使用MapView,换其它类使用地图的话,还需再来授权,否则地图view会是黑屏)。