1.申请密钥(key)

第一步:打开API控制台,如下图所示:

第二步:点击创建应用,开始申请开发密钥,如下图:

第三步:填写应用名称、应用类型注意选择“iOS SDK”、正确填写安全码,点击确认,系统将会自动帮您生成相应的开发密钥:

安全码简介

在申请开发密钥的时候,需要填写对应工程的安全码。这里的安全码指的是该应用的Bundle Identifier,获取方式如下: Xcode切换到Summary标签查看Bundle Identifier

如下图示:

2.注意事项

1.1 工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm)

1.2 在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"

2 在工程属性中显式设定:在Xcode的Project -> Edit Active Target -> Build Setting -> Other Linker Flags中添加-ObjC

3 导入第三方openssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)

4 在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。

5 管理地图的生命周期

-(void)viewWillAppear:(BOOL)animated

{

[_mapView viewWillAppear];

_mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放

}

-(void)viewWillDisappear:(BOOL)animated

{

[_mapView viewWillDisappear];

_mapView.delegate = nil; // 不用时,置nil

}

6.在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):

7.在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start failed)

8.项目中添加mapapi.bundle文件以及添加方法正确

3配置环境

第一步、根据需要导入 .framework包

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

第二步、引入所需的系统库

CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework、libsqlite3.0.tbd(xcode7以前为 libsqlite3.0.dylib)、CoreTelephony.framework 、libstdc++.6.0.9.tbd(xcode7以前为libstdc++.6.0.9.dylib)。

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

第三步、引入所需的第三方openssl库:

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

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

第四步、环境配置

在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。

第五步、引入mapapi.bundle资源文件

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

第六步、引入头文件在使用SDK的类

按需 引入下边的头文件:

4.集成百度地图的导航功能

1: 在使用该套SDK之前,需先申请密钥(ak)才可使用,接口(除发送短信功能外)无使用次数限制。

2iOS导航SDK资源包

3.将SDK和Framework添加进工程

baiduNaviSDK文件夹添加到工程中,把AudioToolbox.framework、ImageIO.framework、CoreMotion.framework、CoreLocation.framework、CoreTelephony.framework、MediaPlayer.framework、AVFoundation.framework、SystemConfiguration.framework、JavaScriptCore.framework、Security.framework 、OpenGLES.framework 、GLKit.framework 、libstdc++6.0.9.dylib、libc++.tbd、libsqlite3.0.tbd、libz.1.2.5.tbd这几个framework添加到工程中

4.修改Build Settings设置项

在Build Settings中, “Other Linker Flags”添加“-ObjC” 标识

5.配置.plist文件

5.appdelegate写入一下代码

#import//引入地图功能所有的头文件#import "BNCoreServices.h"@interface AppDelegate ()//百度地图管理者

@property(nonatomic,strong) BMKMapManager *mapManager;

@end

@implementation AppDelegate

//懒加载

-(BMKMapManager *)mapManager

{

if (_mapManager==nil){

_mapManager=[[BMKMapManager alloc] init];

}

return _mapManager;

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

// 要使用百度地图,请先启动BaiduMapManager

BOOL flag = [self.mapManager start:@"v67SHkNTcSjiKvGoOhBC95m5haIm6bRz" generalDelegate:self];

if (flag == NO) {

NSLog(@"manager start failed!");

}

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

ViewController *vc =[[ViewController alloc] init];

vc.view.backgroundColor = [UIColor whiteColor];

self.window.rootViewController = vc;

[self.window makeKeyAndVisible];

// 初始化导航SDK

/* TTS授权失败

1.不能使用模拟器

2.项目名称不能为中文(工程->build Setting-> product name)

3.必须开启语音播报功能(添加到一个白名单中)

崩溃原因 View controller-based status bar appearance 设置为NO

*/

[[BNCoreServices GetInstance] initServices:@"v67SHkNTcSjiKvGoOhBC95m5haIm6bRz"];

[[BNCoreServices GetInstance] startServicesAsyn:nil fail:nil];

return YES;

}

- (void)applicationWillResignActive:(UIApplication *)application {

[BMKMapView willBackGround];//当应用即将后台时调用,停止一切调用opengl相关的操作

}

- (void)applicationDidBecomeActive:(UIApplication *)application {

[BMKMapView didForeGround];//当应用恢复前台状态时调用,回复地图的渲染和opengl相关的操作

}

@end

6 在调用百度map中使用

#import//引入计算工具所有的头文件#import#import "FAITHBaiDuMapTool.h"@interface ViewController ()/* 地图视图 */@property(nonatomic,weak) BMKMapView *mapView;/* 定位服务 */@property(nonatomic,strong) BMKLocationService *locService ;/* 定位服务 */@property(nonatomic,strong) BMKUserLocation *userLocation ;@end@implementation ViewController-(BMKLocationService *)locService{    if (_locService == nil) {        //初始化BMKLocationService        _locService = [[BMKLocationService alloc]init];        _locService.delegate = self;        //启动LocationService        [_locService startUserLocationService];    }    return _locService;}- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    BMKMapView *mapView = [[BMKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];        [self.view addSubview:mapView];    self.mapView = mapView;        [self locService];        _mapView.showsUserLocation = NO;    _mapView.userTrackingMode = BMKUserTrackingModeFollow;    _mapView.showsUserLocation = YES;    }-(void)viewWillAppear:(BOOL)animated {    [_mapView viewWillAppear];    _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放    _locService.delegate = self;}-(void)viewWillDisappear:(BOOL)animated {    [_mapView viewWillDisappear];    _mapView.delegate = nil; // 不用时,置nil    _locService.delegate = nil;}/** *在地图View将要启动定位时,会调用此函数 *@param mapView 地图View */- (void)willStartLocatingUser{    NSLog(@"start locate");}/** *用户方向更新后,会调用此函数 *@param userLocation 新的用户位置 */- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation{    [_mapView updateLocationData:userLocation];}/** *用户位置更新后,会调用此函数 *@param userLocation 新的用户位置 */- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{    self.userLocation = userLocation;    [_mapView updateLocationData:userLocation];    //设置区域    BMKCoordinateRegion region = BMKCoordinateRegionMake(userLocation.location.coordinate, BMKCoordinateSpanMake(0.01, 0.01));    [_mapView setRegion:region];}/** *在地图View停止定位后,会调用此函数 *@param mapView 地图View */- (void)didStopLocatingUser{    NSLog(@"stop locate");}/** *定位失败后,会调用此函数 *@param mapView 地图View *@param error 错误号,参考CLError.h中定义的错误号 */- (void)didFailToLocateUserWithError:(NSError *)error{    NSLog(@"location error");}- (void)dealloc {    if (_mapView) {        _mapView = nil;    }}/// 长按地图的时候会来到该方法// - Parameters:///  - mapView: 地图视图///  - coordinate: 点击的经纬度-(void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate{    //进行POI检索    [[FAITHBaiDuMapTool shareInstance] poiSearchWithLocation:coordinate keyword:@"酒店" resultBlock:^(BMKPoiInfo *poiInfos, NSString *error) {        if (error != nil) {            return ;        }        for (BMKPoiInfo *poiInfo in poiInfos) {            //添加一个PointAnnotation            BMKPointAnnotation *annotation = [[BMKPointAnnotation alloc] init];            annotation.coordinate = poiInfo.pt;//该点POI的坐标            annotation.title = poiInfo.name;//该点POI的名称            annotation.subtitle = poiInfo.address;//该点POI的地址            [mapView addAnnotation:annotation];        }    }];      //设置区域    BMKCoordinateRegion region = BMKCoordinateRegionMake(coordinate, BMKCoordinateSpanMake(0.05, 0.05));    [mapView setRegion:region];  }/// 当添加一个大头针数据模型的时候,会来到该方法,创建对应的大头针视图并返回// - Parameters:///  - mapView: 地图视图///  - annotation: 大头针数据模型/// - Returns: 大头针视图-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id)annotation

{

if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {

BMKPinAnnotationView *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"newAnnotation"];

newAnnotation.pinColor = BMKPinAnnotationColorPurple;

newAnnotation.animatesDrop = YES;

return newAnnotation;

}

return nil;

}

/// 当点击大头针上面的弹框的时候就会来到该方法

///

/// - Parameters:

///  - mapView: 地图视图

///  - view: 大头针视图

-(void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view

{

[[FAITHBaiDuMapTool shareInstance] startNavigationWithView:view userLocation:self.userLocation];

}

FAITHBaiDu地图工具类

#import#import//引入地图功能所有的头文件#import//引入检索功能所有的头文件

@interface FAITHBaiDuMapTool : NSObject

/*

单例模式

*/

+(instancetype)shareInstance;

/*

POI周边检索

*/

-(void)poiSearchWithLocation:(CLLocationCoordinate2D)location keyword:(NSString *)keyword resultBlock:(void (^)(BMKPoiInfo *,NSString *))resultBlock;

/*

POI详情检索

*/

-(void)poiDeatilSearchWithLocation:(CLLocationCoordinate2D)location poiUid:(NSString *)poiUid resultBlock:(void (^)(BMKPoiInfo *,NSString *))resultBlock;

/*

导航

*/

-(void)startNavigationWithView:(BMKAnnotationView *)view userLocation:(BMKUserLocation *)userLocation;

@end

#import "FAITHBaiDuMapTool.h"#import "BNCoreServices.h"@interface FAITHBaiDuMapTool ()@property(nonatomic,strong) BMKPoiSearch *poiSearch;

//block

@property(nonatomic,strong) void(^resultBlock) (BMKPoiInfo *,NSString *);

@end

@implementation FAITHBaiDuMapTool

static FAITHBaiDuMapTool *_instance = nil ;

+(instancetype)shareInstance

{

FAITHBaiDuMapTool *_instance = [[self alloc] init];

return _instance;

}

+ (instancetype)allocWithZone:(struct _NSZone *)zone

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

_instance = [[super allocWithZone:zone] init];

});

return _instance;

}

- (id)copyWithZone:(NSZone *)zone{

return _instance;

}

- (id)mutableCopyWithZone:(NSZone *)zone

{

return _instance;

}

//懒加载:设置检索对象

-(BMKPoiSearch *)poiSearch

{

if (_poiSearch == nil) {

_poiSearch = [[BMKPoiSearch alloc] init];

_poiSearch.delegate = self;

}

return _poiSearch;

}

/**

检索周边的POI

*/

-(void)poiSearchWithLocation:(CLLocationCoordinate2D)location keyword:(NSString *)keyword resultBlock:(void (^)(BMKPoiInfo *,NSString *))resultBlock {

self.resultBlock = resultBlock;

//POI检索-发起检索

BMKNearbySearchOption *nearbySearchOption = [[BMKNearbySearchOption alloc] init];

nearbySearchOption.pageIndex = 0;//检索页

nearbySearchOption.pageCapacity = 20;//检索数量

nearbySearchOption.location = location;//从介个经纬度坐标开始周边搜索

nearbySearchOption.keyword = keyword;//检索关键字

//开始检索

BOOL flag = [self.poiSearch poiSearchNearBy:nearbySearchOption];

if (flag) {

NSLog(@"周边检索发送成功");

}else

{

NSLog(@"周边检索发送失败");

}

}

/**

检索详情的POI

*/

-(void)poiDeatilSearchWithLocation:(CLLocationCoordinate2D)location poiUid:(NSString *)poiUid resultBlock:(void (^)(BMKPoiInfo *,NSString *))resultBlock {

self.resultBlock = resultBlock;

//POI详情检索

BMKPoiDetailSearchOption* poiDeatilSearchOption = [[BMKPoiDetailSearchOption alloc] init];

poiDeatilSearchOption.poiUid = poiUid;//POI搜索结果中获取的uid

BOOL flag = [_poiSearch poiDetailSearch:poiDeatilSearchOption];

if(flag)

{

//详情检索发起成功

}

else

{

//详情检索发送失败

}

}

// MARK:- 导航

/// 开始导航

/// - Parameter view: 大头针视图

-(void)startNavigationWithView:(BMKAnnotationView *)view userLocation:(BMKUserLocation *)userLocation

{

//实现导航功能

//节点数组

NSMutableArray *nodesArray = [NSMutableArray array];

//起点

BNRoutePlanNode *startNode = [[BNRoutePlanNode alloc] init];

startNode.pos = [[BNPosition alloc] init];//起点位置对象

startNode.pos.x = userLocation.location.coordinate.longitude;//经度

startNode.pos.y = userLocation.location.coordinate.latitude;//纬度;

startNode.pos.eType = BNCoordinate_BaiduMapSDK;//坐标类型

[nodesArray addObject:startNode];

//终点

BNRoutePlanNode *endNode = [[BNRoutePlanNode alloc] init];

endNode.pos = [[BNPosition alloc] init];//终点位置

endNode.pos.x = view.annotation.coordinate.longitude;//经度

endNode.pos.y = view.annotation.coordinate.latitude;//纬度;

endNode.pos.eType = BNCoordinate_BaiduMapSDK;

[nodesArray addObject:endNode];

//发起路径规划

//算路方式,定义见BNRoutePlanMode

//naviNodes:算路节点数组,起点、途经点、终点按顺序排列,节点信息为BNRoutePlanNode结构

//naviTime:发起算路时间,用于优化算路结果,可以为nil

//delegate:算路委托,用于回调

//userInfo:用户需要传入的参数

[[BNCoreServices RoutePlanService] startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self userInfo:nil];

}

// MARK: - BNNaviRoutePlanDelegate

//算路成功回调

-(void)routePlanDidFinished:(NSDictionary *)userInfo

{

[[BNCoreServices UIService] showPage:BNaviUI_NormalNavi delegate:self extParams:nil];

}

//算路失败回调

- (void)routePlanDidFailedWithError:(NSError *)error andUserInfo:(NSDictionary *)userInfo

{

NSLog(@"算路失败");

switch ([error code]%10000)

{

case BNAVI_ROUTEPLAN_ERROR_LOCATIONFAILED:

NSLog(@"暂时无法获取您的位置,请稍后重试");

break;

case BNAVI_ROUTEPLAN_ERROR_ROUTEPLANFAILED:

NSLog(@"无法发起导航");

break;

case BNAVI_ROUTEPLAN_ERROR_LOCATIONSERVICECLOSED:

NSLog(@"定位服务未开启,请到系统设置中打开定位服务。");

break;

case BNAVI_ROUTEPLAN_ERROR_NODESTOONEAR:

NSLog(@"起终点距离起终点太近");

break;

default:

NSLog(@"算路失败");

break;

} }

//算路取消

-(void)routePlanDidUserCanceled:(NSDictionary*)userInfo {

NSLog(@"算路取消");

}

// MARK: - BNNaviUIManagerDelegate

-(void)onExitPage:(BNaviUIType)pageType extraInfo:(NSDictionary *)extraInfo

{

NSLog(@"退出导航页面");

}

// MARK: - BMKPoiSearchDelegate

/*

周边检索监听结果

*/

-(void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode

{

if(errorCode == BMK_SEARCH_NO_ERROR) {

NSLog(@"检索到了");//处理正常的结果

BMKPoiInfo *poiInfos = (BMKPoiInfo *)poiResult.poiInfoList;

//回调

self.resultBlock(poiInfos,nil);

}else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD){

//当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表

// result.cityList;

self.resultBlock(nil,@"起始点有歧义");

}else{

self.resultBlock(nil,@"抱歉没找到结果");

}

}

/*

详细检索监听结果

*/

-(void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode

{

if(errorCode == BMK_SEARCH_NO_ERROR){

NSLog(@"检索到了");//处理正常的结果

}else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD){

//当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表

// result.cityList;

//        self.resultBlock(nil,@"起始点有歧义");

}else{

//        self.resultBlock(nil,@"抱歉没找到结果");

}

}

@end

java模拟器2.3 百度地图_百度地图集成相关推荐

  1. 基于android的百度地图_百度的71个炸天的开源项目

    本文为大家整理了百度开源的70+项目,看看有没有感兴趣的. 1.JavaScript图表库 ECharts ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Ja ...

  2. 百度离线地图_这个地图APP,专注于地图软件该做的事!

    Bmap Bmap,简单的双地图应用.可任意切换/高德地图数据源,致力满足日常生活的出行需求.具有步行.公交.骑行.驾驶等出行方案,查看街景. 新版特性 1.升级百度地图sdk6.0.0 2.升级高德 ...

  3. 地图上分成一块一块区域 高德地图_各种地图(如百度地图、腾讯地图和高德地图)体验上有什么区别?...

    文末有更新 ----------------------- 见图,来体验一下2015年12月7日的百度地图,我真是无话可说 我从来没有搜索过这种东西. 这问题我也@了客服,现在不知道还有没有. 呵呵, ...

  4. java模拟器游戏要钱吗_安卓java模拟器(安卓手机如何玩JAVA游戏以及JAVA软件的方法)...

    首先最简单的方法就是JAVA模拟器,但是由于JAVA模拟器的兼容性并不是太好而导致部分(挺大部分的)机型无法使用.所以就有了第二个方法,那就是PSP模拟器,因为PSP上是有JAVA模拟器的,所以就可以 ...

  5. 高精地图_语义地图_众包地图相关论文笔记

    1.20220618_LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping 2021 3d-Lidar构建long-term地 ...

  6. react 谷歌地图_谷歌地图与React

    react 谷歌地图 情况(The Situation) Your working on a React-based application and you want to implement Goo ...

  7. java 经纬度 地图_百度地图地址经纬度互转,java代码(v2版本)

    2个星期前用百度地图做了地址转换后.本来准备写个工具类添加到项目中突然发现不能用了,于是上百度地图api官网,发现接口已经更改了升级为v2,修改后可以使用,于是把工具类进行分享. 工具类:BaiDuM ...

  8. ios 点生成线路 百度地图_网站地图全面解析

    网站地图相信大家都不陌生,但对于一些刚刚接触seo的小伙伴来说可能会有些疑惑.这段时间我也时常听到有学员说网站地图怎么去制作分析,搞得也是非常的头痛,现在就来带大家全面透析网站地图吧. 一.什么是网站 ...

  9. 百度地图显示服务器地址,百度地图_根据地图上标记位置获取街道信息,以及经纬度信息...

    百度地图Demo var map = new BMap.Map("container");//初始化地图 map.addControl(new BMap.NavigationCon ...

最新文章

  1. selenium提取数据之driver对象定位标签元素获取标签对象的方法
  2. Java微信公众平台开发(四)--回复消息的分类及实体的创建
  3. html列表的列选择事件,html5 datalist 选中option选项后的触发事件
  4. 进程的创建-fork
  5. 数据结构与算法之快速排序
  6. Redis高可用基石--主从同步
  7. [APEC中小企业峰会2009上]成功企业 = 理想主义 + 现实主义
  8. 轻松筹 html模板,水滴筹、轻松筹感人标题模板25个字怎么写?在朋友圈发求捐款语录怎么写?...
  9. 周志华-深度森林(Deep Forest)
  10. android启用hdcp_如何在Android Auto上启用开发人员设置
  11. 约瑟夫环数学问题——举一反三、触类旁通
  12. 大数据技术方面需要哪些支持
  13. 给照片怎么拍板好看?
  14. 国际金融统计 (IFS) 数据库1978-2020
  15. PCF8591 +MQ3 +LCD1602+89C51RC(酒精传感器)
  16. 软件产品的增值税税率该如何选择?
  17. 2006年十二生肖开运大预言
  18. 字节跳动前端实习一面
  19. 徐荣谦《养好脾和肺 宝宝不积食不咳嗽长大个》【01】小儿常见病
  20. word文档打不开显示内容有问题要怎么解决?

热门文章

  1. php从键盘怎么输入,键盘怎么用?电脑键盘用法图文教程(含指法练习)
  2. 品牌笔记本正规与非正规维修上的差别
  3. 信通可以保研计算机吗,保研经历(一)北邮信通院
  4. java架构百度云视频,Java系列学习进阶视频
  5. source map 文件还原
  6. Excel技巧——快捷键的使用
  7. 让自己网站的代码隐藏
  8. TuneUp的Turbo Mode模式
  9. Mybatis-Plus批量插入应该怎么用
  10. [荐]没羽箭张清到底连打梁山多少好汉?