当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS百度地图简单使用详解

iOS百度地图简单使用详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

网络赚钱教程,女游客巴厘岛坠亡,深圳电子厂爆炸

百度地图 ios sdk是一套基于ios 5.0及以上版本设备的应用程序接口,不仅提供展示地图的基本接口,还提供poi检索、路径规划、地图标注、离线地图、定位、周边雷达等丰富的lbs能力 。

今天主要介绍以下接口

  • 基础地图
  • poi检索
  • 定位

首先配置环境

1.自动配置.framework形式开发包(使用cocoapods)<推荐>

2.手动配置.framework形式开发包

特别注意:
(api里有很多注意点,大家可以具体去看.但是我说的后两点少其中一个都会失败,第一点是有需求的话,必须加上)

1、如果在ios9中使用了调起百度地图客户端功能,必须在"info.plist"中进行如下配置,否则不能调起百度地图客户端。

  <key>lsapplicationqueriesschemes</key>
  <array>
    <string>baidumap</string>
  </array>

2、自ios sdk v2.5.0起,为了对ios8的定位能力做兼容,需要在info.plist里添加(以下二选一,两个都添加默认使用 nslocationwheninuseusagedescription):
nslocationwheninuseusagedescription ,允许在前台使用时获取gps的描述
nslocationalwaysusagedescription ,允许永久使用gps的描述

3、在使用xcode6进行sdk开发过程中,需要在info.plist中添加:bundle display name ,且其值不能为空(xcode6新建的项目没有此配置,若没有会造成manager start fail

配置完成后

appdelegate.m文件中添加对bmkmapmanager的初始化,并填入申请的授权key

#import "appdelegate.h"
#import <baidumapapi_base/bmkmapmanager.h>
@interface appdelegate ()

@end

@implementation appdelegate


- (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions {

//创建并初始化一个引擎对象
  bmkmapmanager *manager = [[bmkmapmanager alloc] init];
//启动地图引擎
  bool success = [manager start:@"zbwlngrurtp9cvb5ez6gzpnebljmyylo" generaldelegate:nil];

  if (!success) {
    nslog(@"失败");
  }
  // override point for customization after application launch.
  return yes;
}

1.基础地图

#import "viewcontroller.h"
#import <baidumapapi_map/bmkmapview.h>
@interface viewcontroller ()<bmkmapviewdelegate>

@property (nonatomic,strong) bmkmapview *mapview;//地图视图
@end

@implementation viewcontroller

- (void)viewdidload {
  [super viewdidload];
   //初始化地图
  self.mapview = [[bmkmapview alloc] initwithframe:self.view.frame];
  self.mapview.delegate =self;
  //设置地图的显示样式
  self.mapview.maptype = bmkmaptypesatellite;//卫星地图

  //设定地图是否打开路况图层
  self.mapview.trafficenabled = yes;

  //底图poi标注
  self.mapview.showmappoi = no;

  //在手机上当前可使用的级别为3-21级
  self.mapview.zoomlevel = 21;

  //设定地图view能否支持旋转
  self.mapview.rotateenabled = no;

  //设定地图view能否支持用户移动地图
  self.mapview.scrollenabled = no;

  //添加到view上
  [self.view addsubview:self.mapview];

  //还有很多属性,根据需求查看api
}

运行效果入下;

2.定位

#import "viewcontroller.h"
#import <baidumapapi_map/bmkmapview.h>
#import <baidumapapi_location/bmklocationservice.h>
@interface viewcontroller ()<bmklocationservicedelegate,bmkmapviewdelegate>

@property (nonatomic,strong) bmkmapview *mapview;//地图视图
@property (nonatomic,strong) bmklocationservice *service;//定位服务

@end

@implementation viewcontroller


- (void)viewdidload {
  [super viewdidload];

   //初始化地图
  self.mapview = [[bmkmapview alloc] initwithframe:self.view.frame];
  self.mapview.delegate =self;

  //添加到view上
  [self.view addsubview:self.mapview];

  //初始化定位
  self.service = [[bmklocationservice alloc] init];

  //设置代理
  self.service.delegate = self;

  //开启定位
  [self.service startuserlocationservice];


  // do any additional setup after loading the view, typically from a nib.
}

#pragma mark -------bmklocationservicedelegate 

/**
 *用户位置更新后,会调用此函数
 *@param userlocation 新的用户位置
 */
- (void)didupdatebmkuserlocation:(bmkuserlocation *)userlocation {


  //展示定位
  self.mapview.showsuserlocation = yes;

  //更新位置数据
  [self.mapview updatelocationdata:userlocation];

  //获取用户的坐标
   self.mapview.centercoordinate = userlocation.location.coordinate;

   self.mapview.zoomlevel =18;

}

运行结果

poi检索

#import "viewcontroller.h"
#import <baidumapapi_map/bmkmapview.h>
#import <baidumapapi_location/bmklocationservice.h>
#import <baidumapapi_search/bmkpoisearch.h>
#import <baidumapapi_map/bmkannotation.h>
#import <baidumapapi_map/bmkpointannotation.h>
#import <baidumapapi_map/bmkpinannotationview.h>


#define kwidth [uiscreen mainscreen].bounds.size.width
@interface viewcontroller ()<bmklocationservicedelegate,bmkpoisearchdelegate,bmkmapviewdelegate>

@property (nonatomic,strong) bmkmapview *mapview;//地图视图
@property (nonatomic,strong) bmklocationservice *service;//定位服务
@property (nonatomic,strong) bmkpoisearch *poisearch;//搜索服务

@property (nonatomic,strong) nsmutablearray *dataarray;
@end

@implementation viewcontroller

- (nsmutablearray *)dataarray {
  if (!_dataarray) {
    _dataarray = [nsmutablearray array];

  }
  return _dataarray;

}
- (void)viewdidload {
  [super viewdidload];

  //初始化地图
  self.mapview = [[bmkmapview alloc] initwithframe:self.view.frame];
  self.mapview.delegate =self;
//  //设置地图的显示样式
//  self.mapview.maptype = bmkmaptypesatellite;//卫星地图
//  
//  //设置路况
//  self.mapview.trafficenabled = yes;
//  
//  //底图poi标注
//  self.mapview.showmappoi = no;
//  
//  //在手机上当前可使用的级别为3-21级
//  self.mapview.zoomlevel = 21;
//  
//  //旋转
//  self.mapview.rotateenabled = no;
//  
//  //拖拽
//  self.mapview.scrollenabled = no;
//  

  [self.view addsubview:self.mapview];

  //初始化定位
  self.service = [[bmklocationservice alloc] init];

  //设置代理
  self.service.delegate = self;

  //开启定位
  [self.service startuserlocationservice];


  // do any additional setup after loading the view, typically from a nib.
}

#pragma mark -------bmklocationservicedelegate 


/**
 *用户位置更新后,会调用此函数
 *@param userlocation 新的用户位置
 */
- (void)didupdatebmkuserlocation:(bmkuserlocation *)userlocation {


  //展示定位
  self.mapview.showsuserlocation = yes;

  //更新位置数据
  [self.mapview updatelocationdata:userlocation];

  //获取用户的坐标
   self.mapview.centercoordinate = userlocation.location.coordinate;

   self.mapview.zoomlevel =18;

 

  //初始化搜索
  self.poisearch =[[bmkpoisearch alloc] init];


  self.poisearch.delegate = self;

 

  //初始化一个周边云检索对象
  bmknearbysearchoption *option = [[bmknearbysearchoption alloc] init];

  //索引 默认为0
  option.pageindex = 0;

  //页数默认为10
  option.pagecapacity = 50;

  //搜索半径
  option.radius = 200;

  //检索的中心点,经纬度
  option.location = userlocation.location.coordinate;

  //搜索的关键字
  option.keyword = @"小吃";

 

   //根据中心点、半径和检索词发起周边检索
  bool flag = [self.poisearch poisearchnearby:option];
  if (flag) {
    nslog(@"搜索成功");
    //关闭定位
    [self.service stopuserlocationservice];
  }
  else {

    nslog(@"搜索失败");
  }

}


#pragma mark -------bmkpoisearchdelegate
/**
 *返回poi搜索结果
 *@param searcher 搜索对象
 *@param poiresult 搜索结果列表
 *@param errorcode 错误号,@see bmksearcherrorcode
 */
- (void)ongetpoiresult:(bmkpoisearch *)searcher result:(bmkpoiresult *)poiresult errorcode:(bmksearcherrorcode)errorcode {

   //若搜索成功
  if (errorcode ==bmk_search_no_error) {

    //poi信息类
    //poi列表
    for (bmkpoiinfo *info in poiresult.poiinfolist) {

      [self.dataarray addobject:info];

      //初始化一个点的注释 //只有三个属性
      bmkpointannotation *annotoation = [[bmkpointannotation alloc] init];

      //坐标
      annotoation.coordinate = info.pt;

      //title
      annotoation.title = info.name;

      //子标题
      annotoation.subtitle = info.address;

      //将标注添加到地图上
      [self.mapview addannotation:annotoation];
    }
  }


}

/**
 *返回poi详情搜索结果
 *@param searcher 搜索对象
 *@param poidetailresult 详情搜索结果
 *@param errorcode 错误号,@see bmksearcherrorcode
 */
- (void)ongetpoidetailresult:(bmkpoisearch *)searcher result:(bmkpoidetailresult *)poidetailresult errorcode:(bmksearcherrorcode)errorcode {

  nslog(@"%@",poidetailresult.name);

}


#pragma mark -------------bmkmapviewdelegate

/**
 *根据anntation生成对应的view
 *@param mapview 地图view
 *@param annotation 指定的标注
 *@return 生成的标注view
 */
- (bmkannotationview *)mapview:(bmkmapview *)mapview viewforannotation:(id<bmkannotation>)annotation {

  //如果是注释点
  if ([annotation iskindofclass:[bmkpointannotation class]]) {

    //根据注释点,创建并初始化注释点视图
    bmkpinannotationview *newannotation = [[bmkpinannotationview alloc] initwithannotation:annotation reuseidentifier:@"an"];

    //设置大头针的颜色
    newannotation.pincolor = bmkpinannotationcolorred;

    //设置动画
    newannotation.animatesdrop = yes;

    return newannotation;

  }

  return nil;
}
/**
 *当选中一个annotation views时,调用此接口
 *@param mapview 地图view
 *@param views 选中的annotation views
 */
- (void)mapview:(bmkmapview *)mapview didselectannotationview:(bmkannotationview *)view {

  //poi详情检索信息类
  bmkpoidetailsearchoption *option = [[bmkpoidetailsearchoption alloc] init];


  bmkpoiinfo *info = self.dataarray.firstobject;

  //poi的uid,从poi检索返回的bmkpoiresult结构中获取
  option.poiuid = info.uid;

  /**
   *根据poi uid 发起poi详情检索
   *异步函数,返回结果在bmkpoisearchdelegate的ongetpoidetailresult通知
   *@param option poi详情检索参数类(bmkpoidetailsearchoption)
   *@return 成功返回yes,否则返回no
   */
  bool flag = [self.poisearch poidetailsearch:option];

  if (flag) {
    nslog(@"检索成功");
  }
  else {

    nslog(@"检索失败");
  }

 

}

运行结果

总结

百度地图的功能很强大,还有很多检索,都没有写.大家又兴趣可以钻研下,毕竟第三方的接口文档相对比较明了.以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网