前言: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把错误代码打印出来

  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;

检索成功代码:

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

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

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

结果:

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

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

代码:

  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. @interface ViewController ()<BMKMapViewDelegate,BMKPoiSearchDelegate>
  7. @property (weak, nonatomic) IBOutlet BMKMapView *mapView;
  8. //@property(strong,nonatomic)BMKMapView *mapView;
  9. @property (nonatomic, strong) BMKPoiSearch *search;
  10. @end
  11. @implementation ViewController
  12. #pragma mark poi搜索
  13. - (BMKPoiSearch *)search
  14. {
  15. if (!_search) {
  16. _search = [[BMKPoiSearch alloc]init];
  17. _search.delegate = self;
  18. }
  19. return _search;
  20. }
  21. - (void)viewDidLoad {
  22. [super viewDidLoad];
  23. //    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
  24. //    self.view = mapView;
  25. self.mapView.delegate = self;
  26. // 添加一个PointAnnotation
  27. //    BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
  28. //    CLLocationCoordinate2D coor;
  29. //    coor.latitude = 39.915;
  30. //    coor.longitude = 116.404;
  31. //    annotation.coordinate = coor;
  32. //    annotation.title = @"这里是China";
  33. //    annotation.subtitle = @"这是中国";
  34. //    [_mapView addAnnotation:annotation];
  35. }
  36. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
  37. {
  38. //发起检索
  39. //    BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];
  40. //    option.pageIndex = 0;
  41. //    option.pageCapacity = 10;
  42. ////    option.location = (CLLocationCoordinate2D){39.915, 116.404};//北京
  43. //
  44. //
  45. //        option.location = (CLLocationCoordinate2D){23.117055, 113.275995};//广州
  46. ////    option.keyword = @"大学"; //北京检索大学
  47. //    option.keyword = @"小吃"; //广州检索小吃
  48. //    BOOL flag = [self.search poiSearchNearBy:option];
  49. //    if(flag)
  50. //    {
  51. //        NSLog(@"周边检索发送成功");
  52. //    }
  53. //    else
  54. //    {
  55. //        NSLog(@"周边检索发送失败");
  56. //    }
  57. [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(23.132931, 113.375924)]; //将地图自动定位到检索到的区域
  58. }
  59. #pragma mark 在此方法中打印定位的经纬度跨度
  60. -(void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
  61. {
  62. NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);
  63. }
  64. #pragma mark BMKMapViewDelegate
  65. - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation
  66. {
  67. if ([annotation isKindOfClass:[BMKPointAnnotation class]]){
  68. BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
  69. newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
  70. newAnnotationView.animatesDrop = YES; //设置该标注点动画显示
  71. return newAnnotationView;
  72. }
  73. return nil;
  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. else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){
  87. //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表
  88. // result.cityList;
  89. NSLog(@"起始点有歧义");
  90. } else {
  91. NSLog(@"抱歉,未找到结果--%zd", error);
  92. }
  93. }
  94. #pragma mark 检索成功添加大头针
  95. - (void)addAnnoWithPT:(CLLocationCoordinate2D)coor andTitle:(NSString *)title andAddress:(NSString *)address
  96. {
  97. BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
  98. annotation.coordinate = coor;
  99. annotation.title = title;
  100. annotation.subtitle = address;
  101. [self.mapView addAnnotation:annotation];
  102. }
  103. #pragma mark 将长按的地方作为要检索的区域
  104. -(void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate
  105. {
  106. BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];
  107. option.pageIndex = 0;
  108. option.pageCapacity = 30;
  109. option.location = coordinate;
  110. option.keyword = @"大学";
  111. BOOL flag = [self.search poiSearchNearBy:option];
  112. if(flag)
  113. {
  114. NSLog(@"周边检索发送成功");
  115. }
  116. else
  117. {
  118. NSLog(@"周边检索发送失败");
  119. }
  120. //    CLLocationCoordinate2D center = option.location;
  121. //    BMKCoordinateSpan span = BMKCoordinateSpanMake(0.021686, 0.014705);
  122. //    BMKCoordinateRegion region = BMKCoordinateRegionMake(center, span);
  123. //    [self.mapView setRegion:region animated:YES];
  124. [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(coordinate.latitude,coordinate.longitude)]; //将地图自动定位到检索到的区域
  125. }
  126. @end

效果:

二:iOS导航SDK

1.打开链接

iOS导航SDK

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

效果:

代码:

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

模拟导航效果:

语音播报:

iOS集成百度地图方法步骤的更多相关文章

  1. iOS 集成百度地图 位置偏移问题

    iOS 集成百度SDK 请参考 百度地图官方文档 ,这里不就多啰嗦了 本文介绍的是在百度地图上根据经纬度,自定义气泡时,气泡位置的偏移,在我们天朝这种事是很常见的,也见怪不怪了,在项目中使用的百度地图 ...

  2. IOS 集成百度地图

    申请key ● http://lbsyun.baidu.com/apiconsole/key 下载SDK ● 下载百度地图开发包:http://api.map.baidu.com/lbsapi/clo ...

  3. ios添加百度地图方法

    Hello BaiduMapiOS SDK 引入头文件 引入静态库文件 引入系统framework 引入mapapi.bundle资源文件 初始化BMKMapManager 创建BMKMapView ...

  4. Android集成百度地图详细步骤和错误问题

    先看要实现的效果 第一步, 下载SDK,基础配置,百度开发文档很详细,直接附上链接http://lbsyun.baidu.com/index.php?title=androidsdk/guide/cr ...

  5. Android 开发之集成百度地图的定位与地图展示

    app 应用中,大多数应用都具有定位功能,百度定位就成了开发人员的集成定位功能的首选,近期也在做定位功能,可是发现百度真是个大坑啊, sdk 命名更新了,相关代码却不更新,害得我花费了非常长时间来研究 ...

  6. iOS开发---集成百度地图

    由于iOS MapKit框架很多情况并不能满足我们的需求,我们可以选择集成百度地图,那该如何操作呢? 申请Key 登录百度API管理中心申请Key http://lbsyun.baidu.com/ap ...

  7. iOS开发---集成百度地图,位置偏移问题

    iOS 集成百度SDK 请参考 百度地图官方文档 ,这里不就多啰嗦了 本文介绍的是在百度地图上根据经纬度,自定义气泡时,气泡位置的偏移,在我们天朝这种事是很常见的,也见怪不怪了,在项目中使用的百度地图 ...

  8. iOS开发之集成百度地图踩过的那些坑(基于 Xcode7.0/iOS9.2)

    本篇分4步讲述如何在项目中集成百度地图: 第一步:创建项目 第二步:利用 cocoaPod 导入百度地图的 SDK(pod 'BaiduMapKit' #百度地图SDK) 第三步:在 pch 文件中导 ...

  9. 微信公众号开发《三》微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索

    本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与 ...

随机推荐

  1. LA 7048 Coprime 莫比乌斯反演

    题意: 给出\(n(n \leq 10^5)\)个数字\(a_i(a_i \leq 10^5)\),从中选出\(3\)个数,使得这\(3\)个数两两互质或者两两不互质 分析: 可以说这是<训练指 ...

  2. UVa 12235 状压DP Help Bubu

    题解戳这 一开始没看懂题解,后来想明白以后,d(i, j, s, x)是考虑第i本书的时候,前面已经拿走了j本书,剩下的书的种类的二进制状态为s,剩下的最后一本书的编号为x,所能得到的最小混乱度. 这 ...

  3. 令人惊叹的Chrome浏览器插件

    Chrome是一个简洁而又高效(高性能,高消耗)的浏览器.接下来让我吐血推荐一些常用的Chrome插件. 日常插件 uBlock Origin ----- 比Adblock性能更高的广告插件. Adk ...

  4. 九度oj 题目1363:欢乐斗地主

    题目描述: 如果大家玩过欢乐斗地主这个游戏,就一定知道有一个具有“提示”功能的按钮.如果你不知道你现在手里的牌有没有比上家大的牌,并且你也懒得去一张一张地看你手中的牌.这时候你就可以点“提示”按钮,系 ...

  5. ora-08104 该索引对象 159639 正在被联机建立或重建

    SSH远程连接数据库创建索引,网络中断后,删除索引信息报ora-08104 解决方法: 使用ONLINE_INDEX_CLEAN清除索引痕迹 在sys用户下执行 SQL> conn /as sy ...

  6. iOS开发 UILabel实现自适应高宽

    UILabel是iOS开发常用的控件.UILabel的属性需要了解,UILabel的特殊显示效果也需要我们掌握.UILabel自适应高宽度是很多初学者遇到的技术性难题.比如段文字,要让他完全地分行显示 ...

  7. python多进程(multiprocessing)

    最近有个小课题,需要用到双进程,翻了些资料,还算圆满完成任务.记录一下~ 1.简单地双进程启动 同时的调用print1()和print2()两个打印函数,代码如下: #/usr/bin/python ...

  8. 【bzoj4016】[FJOI2014]最短路径树问题 堆优化Dijkstra+DFS树+树的点分治

    题目描述 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列字典序最小的那条路径( ...

  9. [luoguP2147] [SDOI2008]Cave 洞穴勘测(并查集 || lct)

    传送门 1.并查集骗分(数据太水,比正解还快...) 我们知道,并查集有一步操作叫“路径压缩”,但是本题的并查集我们不能路径压缩,否则就无法进行Destroy操作.那每一步操作我们应该怎么做呢? 对于 ...

  10. C++ 错误解决 —— internal compiler error

    问题: g++ 编译时,报错: g++: internal compiler error: Killed (program cc1plus) 出错原因: 出错的原因是(虚拟机)运行内存不足,而大量te ...