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

  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

  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. }

[objc] view plain copy

  1. @end

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

[objc] view plain copy

  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

代码:

[objc] view plain copy

  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.按照上面给出的步骤配置好

效果:

代码:

[objc] view plain copy

  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

模拟导航效果:

语音播报:

时间: 2024-08-07 22:29:22

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

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

iOS 集成百度SDK 请参考 百度地图官方文档 ,这里不就多啰嗦了 本文介绍的是在百度地图上根据经纬度,自定义气泡时,气泡位置的偏移,在我们天朝这种事是很常见的,也见怪不怪了,在项目中使用的百度地图的SDK,位置各种不对,百度地图和其他地图,如高德,他们都有自己的偏移算法,网上也有很多譬如 火星坐标转换之类的,都不能达到准备显示的效果. 其实百度SDK 有他自己偏移算法,使用百度偏移转换就可以了 BMKPointAnnotation *annotation = [[BMKPointAnnota

ios添加百度地图方法

Hello BaiduMapiOS SDK 引入头文件 引入静态库文件 引入系统framework 引入mapapi.bundle资源文件 初始化BMKMapManager 创建BMKMapView 引入头文件 首先将百度MapAPI提供的头文件和静态库(.a)文件拷贝到您的工程目录下,在Xcode中添加新的文件Group,引入百度MapAPI提供的头文件(请使用Xcode 4.X以上平台). 在您需要使用百度MapAPI的文件中添加以下代码 #import "BMapKit.h" 引

iOS 集成百度地图常见错误详解

1.环境配置 2.导入依赖库: CoreLocation.framework.QuartzCore.framework.OpenGLES.framework.SystemConfiguration.framework.CoreGraphics.framework.Security.framework.libsqlite3.0.tbd.CoreTelephony.framework .libstdc++.6.0.9.tbd 如果没有导入libsqlite3.0.tbd,会报 如果没有导入libst

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

app 应用中,大多数应用都具有定位功能,百度定位就成了开发人员的集成定位功能的首选,最近也在做定位功能,但是发现百度真是个大坑啊, sdk 命名更新了,相关代码却不更新,害得我花费了很长时间来研究,今天来给大家分享下 Android 集成百度地图要注意的事情,这里只是集成了定位和地图展示功能,其他功能还未涉及,先看下效果图: 接下来介绍一下 Android 集成百度地图的步骤: 首先登陆百度开发平台,在我的应用中创建应用,然后你会看到如下界面: 根据它的要求填写相关信息,这里的安全是有 SHA

iOS开发之集成百度地图

由于iOS MapKit框架很多情况并不能满足我们的需求,我们可以选择集成百度地图,那该如何操作呢? 申请Key 登录百度API管理中心申请Key http://lbsyun.baidu.com/apiconsole/key 创建一个应用 箭头所指就是我们所要用到的Key 下载SDK http://developer.baidu.com/map/static/doc/output_ios/BaiduMap_IOSSDK_v2.6.0_All.zip 开发指南 如何使用开发包可以参考开发指南 ht

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

本篇分4步讲述如何在项目中集成百度地图: 第一步:创建项目 第二步:利用 cocoaPod 导入百度地图的 SDK(pod 'BaiduMapKit' #百度地图SDK) 第三步:在 pch 文件中导入头文件和秘钥 秘钥是在 http://lbsyun.baidu.com/apiconsole/key 百度开放平台申请. #define APPKEY @"UzyiXewPsqPhcE1yS8wxqik9" 在使用SDK的类时按需引入下边的头文件 #import <BaiduMap

集成百度地图SDK(swift)

一 集成百度地图最终的效果 二 知识点 1 信息检索 2 地图大头针和导航SDK 三 集成百度地图SDK 1 百度搜索百度地图SDK 2 注册账号(尽量)–>如果没有账号,最好去注册一个账号(我这里就不细说注册账号的步骤了) 3 由于我们要做的是和百度地图相关的,所以直接按照下面图片点击即可(这里我将一一介绍ios中地图的相关开发) 4 点击ios地图SDK里面是一些相关概述 5 按照图片点击进入下面 6 相关解释 6.1 一般我们都是直接点击"全部下载" 6.2 解释 : &q

微信JS-SDK之地理位置的获取与在线导航,集成百度地图实现在线地图搜索

原创声明:本文来源于本人另一博客[微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索]原创作品,绝非他处摘取,转载请联系博主 本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与在线导航. 官方文档地址:https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.htm

Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误

Android Studio 项目中集成百度地图SDK报以下错误: 1 java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create)I 2 at com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create(Native Met