前言: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. JAVA-基础(五) 更多工具集

    1.StringTokenizer(字符串标记) StringTokenizer实现枚举(Enumeration)接口.因此,给定一个输 入字符串,可以使用StringTokenizer对包含于其中的 ...

  2. javascript是脚本语言?javascript万物皆对象?

    呵呵哒!带你见识下js面对对象的魅力 是的是的,退后,朕要开始装逼了- 这是什么鸟东西?是的是的,装逼开始,2016年度最佳JS编译器,ES6标准出来后,小伙伴们对新特性摩拳擦掌,奈何浏览器支持把我们 ...

  3. linux下终止相关操作

    Ctrl c 中止当前正在执行的程序. Ctrl d 相当于exit命令,退出当前会话. Ctrl z 将当前运行的程序放到后台运行.与运行时加&类似.

  4. ibatis 动态SQL

    直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问题,I ...

  5. C++大数相加

    c++ string sum(string s1,string s2) { if(s1.length()<s2.length()) { string temp=s1; s1=s2; s2=tem ...

  6. ie7中position:fixed定位后导致margin:0 auto;无效

    布局网页时,需要把header固定在上方.直接使用position:fixed;现代浏览器以及ie8以上均正常显示,但是ie7中,header里面的子元素设置的水平居中并没有效果.做了各种尝试,都没有 ...

  7. HDU——1061Rightmost Digit(高次方,找规律)

    Rightmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2)——A - Bear and Three Balls(unique函数的使用)

    A. Bear and Three Balls time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  9. [中山市选]杀人游戏 (Tarjan缩点)

    题目链接 Solution 可以考虑到如果知道环内一点的身份,如果凶手在其中就查出来了,同时不会有危险. 那么对警察造成威胁的就是那些身份不明且不能从其他点转移过来的点. 那么大部答案就是缩完点之后入 ...

  10. 自己关于Django的一些实践

    一 render() redirect() HttpResponse() 响应 是个什么东西 def login(request): if request.method=='POST': userna ...