iOS集成百度地图方法步骤

前言:app中的导航功能越来越流行,现在我自己做的项目中也有此需求,做过了后记录下笔记。  由于源代码保密所以这里仅仅提供demo,下面是效果图

一:iOS地图SDK

1.打开 百度地图api链接

iOS地图SDK

2.注册成为开发者并按照步骤走

3.遇到的问题解决

4.遇到这种错误

2016-03-22 17:11:09.745 baiduMap[6664:276199] 地图所需资源文件不完整,请根据开发指南正确添加mapapi.bundle文件

成功:

4.注意BMKMapView 的类型

///地图View类,使用此View可以显示地图窗口,并且对地图进行相关的操作

@interface BMKMapView :UIView

5.集成基础地图

效果:

6.poi检索

遇到错误时候的处理方法点击错误码进去看看

可以用%zd把错误代码打印出来

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //检索结果状态码  
  2. typedef enum{  
  3.     BMK_SEARCH_NO_ERROR = 0,///<检索结果正常返回  
  4.     BMK_SEARCH_AMBIGUOUS_KEYWORD,///<检索词有岐义  
  5.     BMK_SEARCH_AMBIGUOUS_ROURE_ADDR,///<检索地址有岐义  
  6.     BMK_SEARCH_NOT_SUPPORT_BUS,///<该城市不支持公交搜索  
  7.     BMK_SEARCH_NOT_SUPPORT_BUS_2CITY,///<不支持跨城市公交  
  8.     BMK_SEARCH_RESULT_NOT_FOUND,///<没有找到检索结果  
  9.     BMK_SEARCH_ST_EN_TOO_NEAR,///<起终点太近  
  10.     BMK_SEARCH_KEY_ERROR,///<key错误  
  11.     BMK_SEARCH_NETWOKR_ERROR,///网络连接错误  
  12.     BMK_SEARCH_NETWOKR_TIMEOUT,///网络连接超时  
  13.     BMK_SEARCH_PERMISSION_UNFINISHED,///还未完成鉴权,请在鉴权通过后重试  
  14. }BMKSearchErrorCode;  

检索成功代码:

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #import "ViewController.h"  
  2. #import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件  
  3. #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件  
  4. #import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入检索功能所有的头文件  
  5. #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件  
  6.   
  7. @interface ViewController ()<BMKMapViewDelegate,BMKPoiSearchDelegate>  
  8. @property (weak, nonatomic) IBOutlet BMKMapView *mapView;  
  9. //@property(strong,nonatomic)BMKMapView *mapView;  
  10. @property (nonatomic, strong) BMKPoiSearch *search;  
  11. @end  
  12.   
  13. @implementation ViewController  
  14. #pragma mark poi搜索  
  15. - (BMKPoiSearch *)search  
  16. {  
  17.     if (!_search) {  
  18.         _search = [[BMKPoiSearch alloc]init];  
  19.         _search.delegate = self;  
  20.     }  
  21.     return _search;  
  22. }  
  23.   
  24. - (void)viewDidLoad {  
  25.     [super viewDidLoad];  
  26. //    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];  
  27. //    self.view = mapView;  
  28.     self.mapView.delegate = self;  
  29.     // 添加一个PointAnnotation  
  30. //    BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];  
  31. //    CLLocationCoordinate2D coor;  
  32. //    coor.latitude = 39.915;  
  33. //    coor.longitude = 116.404;  
  34. //    annotation.coordinate = coor;  
  35. //    annotation.title = @"这里是China";  
  36. //    annotation.subtitle = @"这是中国";  
  37. //    [_mapView addAnnotation:annotation];  
  38.       
  39.     //发起检索  
  40.     BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];  
  41.     option.pageIndex = 0;  
  42.     option.pageCapacity = 10;  
  43. //    option.location = (CLLocationCoordinate2D){39.915, 116.404};//北京  
  44.     option.location = (CLLocationCoordinate2D){23.117055, 113.275995};//广州  
  45.     option.keyword = @"小吃";  
  46.     BOOL flag = [self.search poiSearchNearBy:option];  
  47.     if(flag)  
  48.     {  
  49.         NSLog(@"周边检索发送成功");  
  50.     }  
  51.     else  
  52.     {  
  53.         NSLog(@"周边检索发送失败");  
  54.     }  
  55.       
  56. }  
  57. #pragma mark BMKMapViewDelegate  
  58. - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation  
  59. {  
  60.     if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {  
  61.         BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];  
  62.         newAnnotationView.pinColor = BMKPinAnnotationColorPurple;  
  63.         newAnnotationView.animatesDrop = YES; //设置该标注点动画显示  
  64.         return newAnnotationView;  
  65.     }  
  66.     return nil;  
  67. }  
  68.   
  69. #pragma mark  BMKPoiSearchDelegate  
  70. - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error  
  71. {  
  72.     if (error == BMK_SEARCH_NO_ERROR) {  
  73.         //在此处理正常结果  
  74.         //        NSLog(@"%@", poiResultList.poiInfoList);  
  75.         [poiResultList.poiInfoList enumerateObjectsUsingBlock:^(BMKPoiInfo *  _Nonnull obj, NSUInteger idx, BOOLBOOL * _Nonnull stop) {  
  76.               NSLog(@"obj.pt = %@,obj.name = %@,obj.address = %@", obj.pt,obj.name,obj.address);  
  77. //            [self addAnnoWithPT:obj.pt andTitle:obj.name andAddress:obj.address];  
  78.         }];  
  79.           
  80.     }  
  81.     else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){  
  82.         //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表  
  83.         // result.cityList;  
  84.         NSLog(@"起始点有歧义");  
  85.     } else {  
  86.         NSLog(@"抱歉,未找到结果--%zd", error);  
  87.     }  
  88. }  
[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. @end  


将检索结果以大头针展示出来 代码

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #import "ViewController.h"  
  2. #import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件  
  3. #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件  
  4. #import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入检索功能所有的头文件  
  5. #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件  
  6.   
  7. @interface ViewController ()<BMKMapViewDelegate,BMKPoiSearchDelegate>  
  8. @property (weak, nonatomic) IBOutlet BMKMapView *mapView;  
  9. //@property(strong,nonatomic)BMKMapView *mapView;  
  10. @property (nonatomic, strong) BMKPoiSearch *search;  
  11. @end  
  12.   
  13. @implementation ViewController  
  14. #pragma mark poi搜索  
  15. - (BMKPoiSearch *)search  
  16. {  
  17.     if (!_search) {  
  18.         _search = [[BMKPoiSearch alloc]init];  
  19.         _search.delegate = self;  
  20.     }  
  21.     return _search;  
  22. }  
  23.   
  24. - (void)viewDidLoad {  
  25.     [super viewDidLoad];  
  26. //    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];  
  27. //    self.view = mapView;  
  28.     self.mapView.delegate = self;  
  29.     // 添加一个PointAnnotation  
  30. //    BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];  
  31. //    CLLocationCoordinate2D coor;  
  32. //    coor.latitude = 39.915;  
  33. //    coor.longitude = 116.404;  
  34. //    annotation.coordinate = coor;  
  35. //    annotation.title = @"这里是China";  
  36. //    annotation.subtitle = @"这是中国";  
  37. //    [_mapView addAnnotation:annotation];  
  38.       
  39.   
  40.       
  41. }  
  42. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event  
  43. {  
  44.     //发起检索  
  45.     BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];  
  46.     option.pageIndex = 0;  
  47.     option.pageCapacity = 10;  
  48.     option.location = (CLLocationCoordinate2D){39.915, 116.404};//北京  
  49.     //    option.location = (CLLocationCoordinate2D){23.117055, 113.275995};//广州  
  50.     option.keyword = @"大学";  
  51.     BOOL flag = [self.search poiSearchNearBy:option];  
  52.     if(flag)  
  53.     {  
  54.         NSLog(@"周边检索发送成功");  
  55.     }  
  56.     else  
  57.     {  
  58.         NSLog(@"周边检索发送失败");  
  59.     }  
  60. }  
  61.   
  62.   
  63. #pragma mark BMKMapViewDelegate  
  64. - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation  
  65. {  
  66.     if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {  
  67.         BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];  
  68.         newAnnotationView.pinColor = BMKPinAnnotationColorPurple;  
  69.         newAnnotationView.animatesDrop = YES; //设置该标注点动画显示  
  70.         return newAnnotationView;  
  71.     }  
  72.     return nil;  
  73. }  
  74.   
  75. #pragma mark  BMKPoiSearchDelegate 处理POI检索结果  
  76. - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error  
  77. {  
  78.     if (error == BMK_SEARCH_NO_ERROR) {  
  79.         //在此处理正常结果  
  80.         //        NSLog(@"%@", poiResultList.poiInfoList);  
  81.         [poiResultList.poiInfoList enumerateObjectsUsingBlock:^(BMKPoiInfo *  _Nonnull obj, NSUInteger idx, BOOLBOOL * _Nonnull stop) {  
  82.               NSLog(@"obj.pt = %@,obj.name = %@,obj.address = %@", obj.pt,obj.name,obj.address);  
  83.             [self addAnnoWithPT:obj.pt andTitle:obj.name andAddress:obj.address];  
  84.         }];  
  85.           
  86.     }  
  87.     else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){  
  88.         //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表  
  89.         // result.cityList;  
  90.         NSLog(@"起始点有歧义");  
  91.     } else {  
  92.         NSLog(@"抱歉,未找到结果--%zd", error);  
  93.     }  
  94. }  
  95. #pragma mark 检索成功添加大头针  
  96. - (void)addAnnoWithPT:(CLLocationCoordinate2D)coor andTitle:(NSString *)title andAddress:(NSString *)address  
  97. {  
  98.     BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];  
  99.     annotation.coordinate = coor;  
  100.     annotation.title = title;  
  101.     annotation.subtitle = address;  
  102.     [self.mapView addAnnotation:annotation];  
  103. }  
  104.   
  105. @end  


结果:

用这个方法将长按的地方作为要检索的区域

-(void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate

代码:

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #import "ViewController.h"  
  2. #import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件  
  3. #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件  
  4. #import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入检索功能所有的头文件  
  5. #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件  
  6.   
  7. @interface ViewController ()<BMKMapViewDelegate,BMKPoiSearchDelegate>  
  8. @property (weak, nonatomic) IBOutlet BMKMapView *mapView;  
  9. //@property(strong,nonatomic)BMKMapView *mapView;  
  10. @property (nonatomic, strong) BMKPoiSearch *search;  
  11. @end  
  12.   
  13. @implementation ViewController  
  14. #pragma mark poi搜索  
  15. - (BMKPoiSearch *)search  
  16. {  
  17.     if (!_search) {  
  18.         _search = [[BMKPoiSearch alloc]init];  
  19.         _search.delegate = self;  
  20.     }  
  21.     return _search;  
  22. }  
  23.   
  24. - (void)viewDidLoad {  
  25.     [super viewDidLoad];  
  26. //    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];  
  27. //    self.view = mapView;  
  28.     self.mapView.delegate = self;  
  29.     // 添加一个PointAnnotation  
  30. //    BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];  
  31. //    CLLocationCoordinate2D coor;  
  32. //    coor.latitude = 39.915;  
  33. //    coor.longitude = 116.404;  
  34. //    annotation.coordinate = coor;  
  35. //    annotation.title = @"这里是China";  
  36. //    annotation.subtitle = @"这是中国";  
  37. //    [_mapView addAnnotation:annotation];  
  38.       
  39.   
  40.       
  41. }  
  42. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event  
  43. {  
  44.     //发起检索  
  45. //    BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];  
  46. //    option.pageIndex = 0;  
  47. //    option.pageCapacity = 10;  
  48. ////    option.location = (CLLocationCoordinate2D){39.915, 116.404};//北京  
  49. //  
  50. //      
  51. //        option.location = (CLLocationCoordinate2D){23.117055, 113.275995};//广州  
  52. ////    option.keyword = @"大学"; //北京检索大学  
  53. //    option.keyword = @"小吃"; //广州检索小吃  
  54. //    BOOL flag = [self.search poiSearchNearBy:option];  
  55. //    if(flag)  
  56. //    {  
  57. //        NSLog(@"周边检索发送成功");  
  58. //    }  
  59. //    else  
  60. //    {  
  61. //        NSLog(@"周边检索发送失败");  
  62. //    }  
  63.   
  64.       
  65.         [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(23.132931, 113.375924)]; //将地图自动定位到检索到的区域  
  66. }  
  67. #pragma mark 在此方法中打印定位的经纬度跨度  
  68. -(void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated  
  69. {  
  70.         NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);  
  71. }  
  72.   
  73. #pragma mark BMKMapViewDelegate  
  74. - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation  
  75. {  
  76.     if ([annotation isKindOfClass:[BMKPointAnnotation class]]){  
  77.         BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];  
  78.         newAnnotationView.pinColor = BMKPinAnnotationColorPurple;  
  79.         newAnnotationView.animatesDrop = YES; //设置该标注点动画显示  
  80.         return newAnnotationView;  
  81.     }  
  82.     return nil;  
  83. }  
  84.   
  85. #pragma mark  BMKPoiSearchDelegate 处理POI检索结果  
  86. - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error  
  87. {  
  88.     if (error == BMK_SEARCH_NO_ERROR) {  
  89.         //在此处理正常结果  
  90.         //        NSLog(@"%@", poiResultList.poiInfoList);  
  91.         [poiResultList.poiInfoList enumerateObjectsUsingBlock:^(BMKPoiInfo *  _Nonnull obj, NSUInteger idx, BOOLBOOL * _Nonnull stop) {  
  92.               NSLog(@"obj.pt = %@,obj.name = %@,obj.address = %@", obj.pt,obj.name,obj.address);  
  93.             [self addAnnoWithPT:obj.pt andTitle:obj.name andAddress:obj.address];  
  94.         }];  
  95.           
  96.     }  
  97.     else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){  
  98.         //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表  
  99.         // result.cityList;  
  100.         NSLog(@"起始点有歧义");  
  101.     } else {  
  102.         NSLog(@"抱歉,未找到结果--%zd", error);  
  103.     }  
  104. }  
  105. #pragma mark 检索成功添加大头针  
  106. - (void)addAnnoWithPT:(CLLocationCoordinate2D)coor andTitle:(NSString *)title andAddress:(NSString *)address  
  107. {  
  108.     BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];  
  109.     annotation.coordinate = coor;  
  110.     annotation.title = title;  
  111.     annotation.subtitle = address;  
  112.     [self.mapView addAnnotation:annotation];  
  113. }  
  114. #pragma mark 将长按的地方作为要检索的区域  
  115. -(void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate  
  116. {  
  117.     BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];  
  118.     option.pageIndex = 0;  
  119.     option.pageCapacity = 30;  
  120.     option.location = coordinate;  
  121.     option.keyword = @"大学";  
  122.     BOOL flag = [self.search poiSearchNearBy:option];  
  123.     if(flag)  
  124.     {  
  125.         NSLog(@"周边检索发送成功");  
  126.     }  
  127.     else  
  128.     {  
  129.         NSLog(@"周边检索发送失败");  
  130.     }  
  131.       
  132. //    CLLocationCoordinate2D center = option.location;  
  133. //    BMKCoordinateSpan span = BMKCoordinateSpanMake(0.021686, 0.014705);  
  134. //    BMKCoordinateRegion region = BMKCoordinateRegionMake(center, span);  
  135. //    [self.mapView setRegion:region animated:YES];  
  136.     [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(coordinate.latitude,coordinate.longitude)]; //将地图自动定位到检索到的区域  
  137. }  
  138. @end  

效果:



二:iOS导航SDK

1.打开链接

iOS导航SDK

2.按照上面给出的步骤配置好

效果:

代码:

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //  
  2. //  ViewController.m  
  3. //  baiduMap  
  4. //  
  5. //  Created by Vitco on 16/3/22.  
  6. //  Copyright © 2016年 Vitco. All rights reserved.  
  7. //  
  8.   
  9. #import "ViewController.h"  
  10. #import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件  
  11. #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件  
  12. #import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入检索功能所有的头文件  
  13. #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件  
  14. #import "BNCoreServices.h"  
  15. @interface ViewController ()<BMKMapViewDelegate,BMKPoiSearchDelegate,BNNaviRoutePlanDelegate>  
  16. @property (weak, nonatomic) IBOutlet BMKMapView *mapView;  
  17. //@property(strong,nonatomic)BMKMapView *mapView;  
  18. @property (nonatomic, strong) BMKPoiSearch *search;  
  19. @end  
  20.   
  21. @implementation ViewController  
  22. #pragma mark poi搜索  
  23. - (BMKPoiSearch *)search  
  24. {  
  25.     if (!_search) {  
  26.         _search = [[BMKPoiSearch alloc]init];  
  27.         _search.delegate = self;  
  28.     }  
  29.     return _search;  
  30. }  
  31.   
  32. - (void)viewDidLoad {  
  33.     [super viewDidLoad];  
  34. //    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];  
  35. //    self.view = mapView;  
  36.     self.mapView.delegate = self;  
  37.     // 添加一个PointAnnotation  
  38. //    BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];  
  39. //    CLLocationCoordinate2D coor;  
  40. //    coor.latitude = 39.915;  
  41. //    coor.longitude = 116.404;  
  42. //    annotation.coordinate = coor;  
  43. //    annotation.title = @"这里是China";  
  44. //    annotation.subtitle = @"这是中国";  
  45. //    [_mapView addAnnotation:annotation];  
  46.       
  47.   
  48.       
  49. }  
  50.   
  51. #pragma mark 发起导航 路线规划  
  52. //- (void)startNaviWithEndPT:(CLLocationCoordinate2D)endPT  
  53. //{  
  54. //    //节点数组  
  55. //    NSMutableArray *nodesArray = [[NSMutableArray alloc]    initWithCapacity:2];  
  56. //      
  57. //    //起点  
  58. //    BNRoutePlanNode *startNode = [[BNRoutePlanNode alloc] init];  
  59. //    startNode.pos = [[BNPosition alloc] init];  
  60. //    startNode.pos.x = 113.375924;  
  61. //    startNode.pos.y = 23.132931;  
  62. //    startNode.pos.eType = BNCoordinate_BaiduMapSDK;  
  63. //    [nodesArray addObject:startNode];  
  64. //      
  65. //    //终点  
  66. //    BNRoutePlanNode *endNode = [[BNRoutePlanNode alloc] init];  
  67. //    endNode.pos = [[BNPosition alloc] init];  
  68. //    endNode.pos.x = endPT.longitude;  
  69. //    endNode.pos.y = endPT.latitude;  
  70. //    endNode.pos.eType = BNCoordinate_BaiduMapSDK;  
  71. //    [nodesArray addObject:endNode];  
  72. //    //发起路径规划  
  73. //    [BNCoreServices_RoutePlan startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self userInfo:nil];  
  74. //}  
  75. //发起导航  
  76. - (void)startNavi  
  77. {  
  78.     //节点数组  
  79.     NSMutableArray *nodesArray = [[NSMutableArray alloc]    initWithCapacity:2];  
  80.       
  81.     //起点  
  82.     BNRoutePlanNode *startNode = [[BNRoutePlanNode alloc] init];  
  83.     startNode.pos = [[BNPosition alloc] init];  
  84.     startNode.pos.x = 113.936392;  
  85.     startNode.pos.y = 22.547058;  
  86.     startNode.pos.eType = BNCoordinate_BaiduMapSDK;  
  87.     [nodesArray addObject:startNode];  
  88.       
  89.     //终点  
  90.     BNRoutePlanNode *endNode = [[BNRoutePlanNode alloc] init];  
  91.     endNode.pos = [[BNPosition alloc] init];  
  92.     endNode.pos.x = 114.077075;  
  93.     endNode.pos.y = 22.543634;  
  94.     endNode.pos.eType = BNCoordinate_BaiduMapSDK;  
  95.     [nodesArray addObject:endNode];  
  96.     //发起路径规划  
  97.     [BNCoreServices_RoutePlan startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self userInfo:nil];  
  98. }  
  99. //导航算路成功后,在回调函数中发起导航,如下:  
  100. //算路成功回调  
  101. -(void)routePlanDidFinished:(NSDictionary *)userInfo  
  102. {  
  103.     NSLog(@"算路成功");  
  104.       
  105.     //路径规划成功,开始导航  
  106. //    [BNCoreServices_UI showNaviUI: BN_NaviTypeReal delegete:self isNeedLandscape:YES];  
  107.       [BNCoreServices_UI showNaviUI: BN_NaviTypeReal delegete:nil isNeedLandscape:YES];  
  108.   
  109. }  
  110.   
  111. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event  
  112. {  
  113.     [self startNavi];  
  114.     [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(23.132931, 113.375924)]; //将地图自动定位到检索到的区域  
  115. }  
  116. #pragma mark 2.在此方法中打印定位的经纬度跨度  
  117. -(void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated  
  118. {  
  119.         NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);  
  120. }  
  121. #pragma mark 3:根据anntation生成对应的View  
  122. /** 
  123.  *根据anntation生成对应的View 
  124.  *@param mapView 地图View 
  125.  *@param annotation 指定的标注 
  126.  *@return 生成的标注View 
  127.  */  
  128. - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation  
  129. {  
  130.     if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {  
  131.         static NSString *pinID = @"PIN";  
  132.         BMKPinAnnotationView *newAnnotationView = (BMKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pinID];  
  133.         if (newAnnotationView == nil) {  
  134.             newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinID];  
  135.         }  
  136.         newAnnotationView.annotation = annotation; //重用赋值  
  137.           
  138.         newAnnotationView.pinColor = BMKPinAnnotationColorPurple;  
  139.         newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示  
  140.           
  141.         //在大头针上面添加一个按钮 增添一个点击事件 当响应这个事件的时候就做一些事情(在这里可以是导航)  
  142.         UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];  
  143.         [btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];  
  144.         newAnnotationView.rightCalloutAccessoryView = btn;  
  145.           
  146.         return newAnnotationView;  
  147.     }  
  148.     return nil;  
  149. }  
  150.   
  151. - (void)click  
  152. {  
  153.     NSLog(@"开始导航");  
  154.       
  155. //    CLLocationCoordinate2D coordinate = _selectAnno.coordinate;  
  156. //    [self startNaviWithEndPT:coordinate];  
  157. }  
  158.   
  159. #pragma mark  BMKPoiSearchDelegate 4.处理POI检索结果  
  160. - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error  
  161. {  
  162.     if (error == BMK_SEARCH_NO_ERROR) {  
  163.         //在此处理正常结果  
  164.         //        NSLog(@"%@", poiResultList.poiInfoList);  
  165.         [poiResultList.poiInfoList enumerateObjectsUsingBlock:^(BMKPoiInfo *  _Nonnull obj, NSUInteger idx, BOOLBOOL * _Nonnull stop) {  
  166.               NSLog(@"obj.pt = %@,obj.name = %@,obj.address = %@", obj.pt,obj.name,obj.address);  
  167.             [self addAnnoWithPT:obj.pt andTitle:obj.name andAddress:obj.address];  
  168.         }];  
  169.           
  170.     }  
  171.     else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){  
  172.         //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表  
  173.         // result.cityList;  
  174.         NSLog(@"起始点有歧义");  
  175.     } else {  
  176.         NSLog(@"抱歉,未找到结果--%zd", error);  
  177.     }  
  178. }  
  179. #pragma mark 检索成功添加大头针  
  180. - (void)addAnnoWithPT:(CLLocationCoordinate2D)coor andTitle:(NSString *)title andAddress:(NSString *)address  
  181. {  
  182.     BMKPointAnnotation * annotation = [[BMKPointAnnotation alloc]init];  
  183.     annotation.coordinate = coor;  
  184.     annotation.title = title;  
  185.     annotation.subtitle = address;  
  186.     [self.mapView addAnnotation:annotation];  
  187. }  
  188. #pragma mark  1. 将长按的地方作为要检索的区域  
  189. -(void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate  
  190. {  
  191.     BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];  
  192.     option.pageIndex = 0;  
  193.     option.pageCapacity = 30;  
  194.     option.location = coordinate;  
  195.     option.keyword = @"大学";  
  196.     BOOL flag = [self.search poiSearchNearBy:option];  
  197.     if(flag)  
  198.     {  
  199.         NSLog(@"周边检索发送成功");  
  200.     }  
  201.     else  
  202.     {  
  203.         NSLog(@"周边检索发送失败");  
  204.     }  
  205. //    CLLocationCoordinate2D center = option.location;  
  206. //    BMKCoordinateSpan span = BMKCoordinateSpanMake(0.021686, 0.014705);  
  207. //    BMKCoordinateRegion region = BMKCoordinateRegionMake(center, span);  
  208. //    [self.mapView setRegion:region animated:YES];  
  209.     [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(coordinate.latitude,coordinate.longitude)]; //将地图自动定位到检索到的区域  
  210. }  
  211. @end  

模拟导航效果:

语音播报:

原文地址:https://www.cnblogs.com/wanghuaijun/p/5885332.html