zoukankan      html  css  js  c++  java
  • 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  

    模拟导航效果:

    语音播报:

  • 相关阅读:
    授权管理-LDAP-介绍与环境搭建
    Gerrit系统框架介绍
    代码托管-gerrit-介绍与环境搭建
    springMVC
    spring,springMVC,mybatis项目添加maven后报500错
    SSM项目引入文件失败
    spring与mybatis整合
    幂等问题本质和业务场景的解决方案
    spring boot logback无感配置
    sentinel与hystrix对比
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/5885332.html
Copyright © 2011-2022 走看看