前言: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. [git 学习篇]删除文件

    1 现在本地文件管理器删除了readme.txt(这个readme.txt已经在创库存在的) rm -rf readme.txt 2 此时git status查看 $ git status # On ...

  2. Wannafly挑战赛6

    完全平方数 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld 题目描述 多次查询[l,r]范围内的完全平方 ...

  3. [错误处理]python大小写敏感,关键字不要写错

    今天调试程序,发现了一个极为隐蔽的bug. True False关键字大小写写错了,然后半天没找出问题所在.

  4. Set容器——HashSet及常用API

    Set容器特点: ①   Set容器是一个不包含重复元素的Collection,并且最多包含一个null元素,它和List容器相反,Set容器不能保证其元素的顺序; ②   最常用的两个Set接口的实 ...

  5. Spring 4.3.11.RELEASE文档阅读(二):Core Technologies_IOC

    在看这部分内容的时候,想了一些问题: 容器: 1,什么是容器 用来包装或装载物品的贮存器 2,容器能做什么 包装或装载物品 3,为什么需要容器 为什么要使用集装箱?如果没有容器会是什么样? 4,常见的 ...

  6. you build it,you run it

    this article is almostly about  a book named Migrating_to_Microservices_Databases, and it's just the ...

  7. 设计模式(Java随笔)—装饰模式

    装饰模式(Decorator Pattern):为已有功能动态地添加更多功能的一种方式Attach additional responsiblities to an object dynamicall ...

  8. CentOS7 Failed to start iptables.解决方法

    Shit, CentOS怎么这么多bug.... 公司机房周日突然掉电,之前的Openstack环境就不能用了. 重新Run了一遍安装脚本,发现这个错误: iptables 咋又起不来了呢..... ...

  9. oracle 导出表结构信息

    直接贴sql: select cols.table_name 表名, cols.column_name 列名, cols.data_type 字段类型, cols.data_length 长度, co ...

  10. 转 Python常见数据结构整理

    http://www.cnblogs.com/jeffwongishandsome/archive/2012/08/05/2623660.html Python常见数据结构整理 Python中常见的数 ...