• iOS百度地图简单使用


    本文介绍三种接口:

    1.基础地图
    2.POI检索
    3.定位

    首先是配置环境,有两种方法,方法在官方教程里都有,不再多说

    1.使用CocoaPods自动配置【这个方法特别好,因为当你使用CocoaPods配置完之后就可以直接使用了,简单到你都不敢相信,我他妈用手动配置,每次都有各种问题,解决起来烦死人,使用CocoaPods配置,可能会报一个错(linker command failed with exit code 1 (use -v to see invocation)),但是,很好解决,只需要找到Build settings->Linking->Other Linker Flags,添加一个-all_load就可以了 】

    2.手动配置【这个方法就是狗屎 bull shit】

    特别注意:

    1 1、如果在iOS9中使用了调起百度地图客户端功能,必须在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。
    2     <key>LSApplicationQueriesSchemes</key>
    3     <array>
    4         <string>baidumap</string>
    5     </array>
    6 2、自iOS SDK v2.5.0起,为了对iOS8的定位能力做兼容,需要在info.plist里添加(以下二选一,两个都添加默认使用 NSLocationWhenInUseUsageDescription):
    7 NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
    8 NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
    9 3、在使用Xcode6进行SDK开发过程中,需要在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start fail

    配置完成后

    在AppDelegate.m文件中添加对BMKMapManager的初始化,并填入申请的授权Key

     1 #import "AppDelegate.h"
     2 #import <BaiduMapAPI_Base/BMKMapManager.h>
     3 @interface AppDelegate ()
     4 
     5 @end
     6 
     7 @implementation AppDelegate
     8 
     9 
    10 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    11 
    12 //创建并初始化一个引擎对象
    13     BMKMapManager *manager = [[BMKMapManager alloc] init];
    14 //启动地图引擎
    15     BOOL success =  [manager start:@"zBWLNgRUrTp9CVb5Ez6gZpNebljmYylO" generalDelegate:nil];
    16 
    17     if (!success) {
    18         NSLog(@"失败");
    19     }
    20     // Override point for customization after application launch.
    21     return YES;
    22 }

    1.基础地图

     1 #import "ViewController.h"
     2 #import <BaiduMapAPI_Map/BMKMapView.h>
     3 @interface ViewController ()<BMKMapViewDelegate>
     4 
     5 @property (nonatomic,strong) BMKMapView *mapView;//地图视图
     6 @end
     7 
     8 @implementation ViewController
     9 
    10 - (void)viewDidLoad {
    11     [super viewDidLoad];
    12      //初始化地图
    13     self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
    14     self.mapView.delegate =self;
    15     //设置地图的显示样式
    16     self.mapView.mapType = BMKMapTypeSatellite;//卫星地图
    17 
    18     //设定地图是否打开路况图层
    19     self.mapView.trafficEnabled = YES;
    20 
    21     //底图poi标注
    22     self.mapView.showMapPoi = NO;
    23 
    24     //在手机上当前可使用的级别为3-21级
    25     self.mapView.zoomLevel = 21;
    26 
    27     //设定地图View能否支持旋转
    28     self.mapView.rotateEnabled = NO;
    29 
    30     //设定地图View能否支持用户移动地图
    31     self.mapView.scrollEnabled = NO;
    32 
    33     //添加到view上
    34     [self.view addSubview:self.mapView];
    35 
    36    //还有很多属性,根据需求查看API
    37 }

    因为我们选的样式是卫星地图,所有效果如下

    2.定位

     1 #import "ViewController.h"
     2 #import <BaiduMapAPI_Map/BMKMapView.h>
     3 #import <BaiduMapAPI_Location/BMKLocationService.h>
     4 @interface ViewController ()<BMKLocationServiceDelegate,BMKMapViewDelegate>
     5 
     6 @property (nonatomic,strong) BMKMapView *mapView;//地图视图
     7 @property (nonatomic,strong) BMKLocationService *service;//定位服务
     8 
     9 @end
    10 
    11 @implementation ViewController
    12 
    13 
    14 - (void)viewDidLoad {
    15     [super viewDidLoad];
    16 
    17      //初始化地图
    18     self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
    19     self.mapView.delegate =self;
    20 
    21     //添加到view上
    22     [self.view addSubview:self.mapView];
    23 
    24     //初始化定位
    25     self.service = [[BMKLocationService alloc] init];
    26 
    27     //设置代理
    28     self.service.delegate = self;
    29 
    30     //开启定位
    31     [self.service startUserLocationService];
    32 
    33 
    34     // Do any additional setup after loading the view, typically from a nib.
    35 }
    36 
    37 #pragma mark -------BMKLocationServiceDelegate 
    38 
    39 /**
    40  *用户位置更新后,会调用此函数
    41  *@param userLocation 新的用户位置
    42  */
    43 - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {
    44 
    45 
    46     //展示定位
    47     self.mapView.showsUserLocation = YES;
    48 
    49     //更新位置数据
    50     [self.mapView updateLocationData:userLocation];
    51 
    52     //获取用户的坐标
    53      self.mapView.centerCoordinate = userLocation.location.coordinate;
    54 
    55      self.mapView.zoomLevel =18;
    56 
    57 }

    效果如下

    3.POI检索

      1 #import "ViewController.h"
      2 #import <BaiduMapAPI_Map/BMKMapView.h>
      3 #import <BaiduMapAPI_Location/BMKLocationService.h>
      4 #import <BaiduMapAPI_Search/BMKPoiSearch.h>
      5 #import <BaiduMapAPI_Map/BMKAnnotation.h>
      6 #import <BaiduMapAPI_Map/BMKPointAnnotation.h>
      7 #import <BaiduMapAPI_Map/BMKPinAnnotationView.h>
      8 
      9 
     10 #define kWidth [UIScreen mainScreen].bounds.size.width
     11 @interface ViewController ()<BMKLocationServiceDelegate,BMKPoiSearchDelegate,BMKMapViewDelegate>
     12 
     13 @property (nonatomic,strong) BMKMapView *mapView;//地图视图
     14 @property (nonatomic,strong) BMKLocationService *service;//定位服务
     15 @property (nonatomic,strong) BMKPoiSearch *poiSearch;//搜索服务
     16 
     17 @property (nonatomic,strong) NSMutableArray *dataArray;
     18 @end
     19 
     20 @implementation ViewController
     21 
     22 - (NSMutableArray *)dataArray {
     23     if (!_dataArray) {
     24         _dataArray = [NSMutableArray array];
     25 
     26     }
     27     return _dataArray;
     28 
     29 }
     30 - (void)viewDidLoad {
     31     [super viewDidLoad];
     32 
     33     //初始化地图
     34     self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
     35     self.mapView.delegate =self;
     36 //    //设置地图的显示样式
     37 //    self.mapView.mapType = BMKMapTypeSatellite;//卫星地图
     38 //    
     39 //    //设置路况
     40 //    self.mapView.trafficEnabled = YES;
     41 //    
     42 //    //底图poi标注
     43 //    self.mapView.showMapPoi = NO;
     44 //    
     45 //    //在手机上当前可使用的级别为3-21级
     46 //    self.mapView.zoomLevel = 21;
     47 //    
     48 //    //旋转
     49 //    self.mapView.rotateEnabled = NO;
     50 //    
     51 //    //拖拽
     52 //    self.mapView.scrollEnabled = NO;
     53 //    
     54 
     55     [self.view addSubview:self.mapView];
     56 
     57     //初始化定位
     58     self.service = [[BMKLocationService alloc] init];
     59 
     60     //设置代理
     61     self.service.delegate = self;
     62 
     63     //开启定位
     64     [self.service startUserLocationService];
     65 
     66 
     67     // Do any additional setup after loading the view, typically from a nib.
     68 }
     69 
     70 #pragma mark -------BMKLocationServiceDelegate 
     71 
     72 
     73 /**
     74  *用户位置更新后,会调用此函数
     75  *@param userLocation 新的用户位置
     76  */
     77 - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {
     78 
     79 
     80     //展示定位
     81     self.mapView.showsUserLocation = YES;
     82 
     83     //更新位置数据
     84     [self.mapView updateLocationData:userLocation];
     85 
     86     //获取用户的坐标
     87      self.mapView.centerCoordinate = userLocation.location.coordinate;
     88 
     89      self.mapView.zoomLevel =18;
     90 
     91 
     92 
     93     //初始化搜索
     94     self.poiSearch =[[BMKPoiSearch alloc] init];
     95 
     96 
     97     self.poiSearch.delegate = self;
     98 
     99 
    100 
    101     //初始化一个周边云检索对象
    102     BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc] init];
    103 
    104     //索引 默认为0
    105     option.pageIndex = 0;
    106 
    107     //页数默认为10
    108     option.pageCapacity = 50;
    109 
    110     //搜索半径
    111     option.radius = 200;
    112 
    113     //检索的中心点,经纬度
    114     option.location = userLocation.location.coordinate;
    115 
    116     //搜索的关键字
    117     option.keyword = @"小吃";
    118 
    119 
    120 
    121      //根据中心点、半径和检索词发起周边检索
    122     BOOL flag = [self.poiSearch poiSearchNearBy:option];
    123     if (flag) {
    124         NSLog(@"搜索成功");
    125         //关闭定位
    126         [self.service stopUserLocationService];
    127     }
    128     else {
    129 
    130         NSLog(@"搜索失败");
    131     }
    132 
    133 }
    134 
    135 
    136 #pragma mark -------BMKPoiSearchDelegate
    137 /**
    138  *返回POI搜索结果
    139  *@param searcher 搜索对象
    140  *@param poiResult 搜索结果列表
    141  *@param errorCode 错误号,@see BMKSearchErrorCode
    142  */
    143 - (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {
    144 
    145      //若搜索成功
    146     if (errorCode ==BMK_SEARCH_NO_ERROR) {
    147 
    148         //POI信息类
    149         //poi列表
    150         for (BMKPoiInfo *info in poiResult.poiInfoList) {
    151 
    152             [self.dataArray addObject:info];
    153 
    154             //初始化一个点的注释 //只有三个属性
    155             BMKPointAnnotation *annotoation = [[BMKPointAnnotation alloc] init];
    156 
    157             //坐标
    158             annotoation.coordinate = info.pt;
    159 
    160             //title
    161             annotoation.title = info.name;
    162 
    163             //子标题
    164             annotoation.subtitle = info.address;
    165 
    166             //将标注添加到地图上
    167             [self.mapView addAnnotation:annotoation];
    168         }
    169     }
    170 
    171 
    172 }
    173 
    174 /**
    175  *返回POI详情搜索结果
    176  *@param searcher 搜索对象
    177  *@param poiDetailResult 详情搜索结果
    178  *@param errorCode 错误号,@see BMKSearchErrorCode
    179  */
    180 - (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode {
    181 
    182     NSLog(@"%@",poiDetailResult.name);
    183 
    184 }
    185 
    186 
    187 #pragma mark -------------BMKMapViewDelegate
    188 
    189 /**
    190  *根据anntation生成对应的View
    191  *@param mapView 地图View
    192  *@param annotation 指定的标注
    193  *@return 生成的标注View
    194  */
    195 - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation {
    196 
    197     //如果是注释点
    198     if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
    199 
    200         //根据注释点,创建并初始化注释点视图
    201         BMKPinAnnotationView  *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"an"];
    202 
    203         //设置大头针的颜色
    204         newAnnotation.pinColor = BMKPinAnnotationColorRed;
    205 
    206         //设置动画
    207         newAnnotation.animatesDrop = YES;
    208 
    209         return newAnnotation;
    210 
    211     }
    212 
    213     return nil;
    214 }
    215 /**
    216  *当选中一个annotation views时,调用此接口
    217  *@param mapView 地图View
    218  *@param views 选中的annotation views
    219  */
    220 - (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view {
    221 
    222     //poi详情检索信息类
    223     BMKPoiDetailSearchOption *option = [[BMKPoiDetailSearchOption alloc] init];
    224 
    225 
    226     BMKPoiInfo *info = self.dataArray.firstObject;
    227 
    228     //poi的uid,从poi检索返回的BMKPoiResult结构中获取
    229     option.poiUid = info.uid;
    230 
    231     /**
    232      *根据poi uid 发起poi详情检索
    233      *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiDetailResult通知
    234      *@param option poi详情检索参数类(BMKPoiDetailSearchOption)
    235      *@return 成功返回YES,否则返回NO
    236      */
    237     BOOL flag = [self.poiSearch poiDetailSearch:option];
    238 
    239     if (flag) {
    240         NSLog(@"检索成功");
    241     }
    242     else {
    243 
    244         NSLog(@"检索失败");
    245     }
    246 
    247 }

    运行效果如下

    注意:模拟器是有很多问题的,如果定位不了什么的,都是正常的

  • 相关阅读:
    01--图解数据结构之数组实现容器
    00--图解数据结构之开篇+容器基类
    O3-开源框架使用之Butterknife 8.8.1及源码浅析
    3-VII-RecyclerView的item操作
    D11-Android自定义控件之动画篇3-插值器与估值器
    D10-Android自定义控件之动画篇2-动画监听
    /var/spool/postfix/maildrop 出现大量文件原因和解决办法
    golang捕获迭代变量,实参的估值时刻
    Golang标准库深入
    golang中type关键字使用
  • 原文地址:https://www.cnblogs.com/zhizunbao/p/5558773.html
Copyright © 2020-2023  润新知