iOS 百度地图v2.9.1 API 的详细使用(三)

周边雷达

一、简介

1. 什么是周边雷达功能?

周边雷达功能,是面向移动端开发者的一套SDK功能接口。同步支持Android和iOS端。它的本质是一个连接百度LBS开放平台前端SDK产品和后端LBS云的中间服务。

2. 利用周边雷达能够实现什么?

开发者利用周边雷达功能,可以便捷的在自己的应用内,帮助用户实现查找周边跟“我”使同样一款App的人,这样一个功能。

3. 周边雷达功能的典型使用场景

(1)查看周边都有谁跟“我”使用同一个App,分布在哪里?

(2)查看周边用户在听什么歌、看什么文章、有什么新动态?

(3)查看周边有什么最新发生的新闻、资讯?

4. 使用周边雷达功能的流程

第一步 注册周边雷达

在使用周边雷达功能之前,需要对应用的密钥(Key)做相应的注册操作。周边雷达支持应用位置信息上传,及一个或多个应用之间实现相互的位置信息查看功能。

第二步 集成SDK

周边雷达是地图SDK产品的一个功能模块,需要使用周边雷达功能的开发者,需在官网下载包含周边雷达功能的地图SDK,并将其集成到自己的开发环境中即可。 具体SDK集成方式请参考《开发指南 – 配置开发环境》章节的介绍。

第三步 开发

完成周边雷达注册和SDK集成后,即可开始具体功能的开发工作。 具体使用方法请参考后文的详细介绍及官方Demo示例。

二、注册周边雷达功能

注册周边雷达是使用其相应功能的基础前提。通过注册可实现一个或多个应用之间的关系绑定,实现相互之间的位置信息查看。

点击如下按钮,进入我的周边雷达管理及新建页面。

三、初始化周边雷达功能

在使用位置信息上传和检索周边位置信息之前,需要对周边雷达功能模块进行初始化操作。初始化的核心代码如下:

1、周边雷达管理类使用了单例模式,并且通过引用计数的方式管理这个实例。可以使用使用下边的方法获取实例(引用计数加1):

BMKRadarManager *_radarManager=[BMKRadarManager  getRadarManagerInstance];

在不需要时,通过下边的方法使引用计数减1.

[BMKRadarManager  releaseRadarManagerInstance];

2、在上传和拉取位置信息前,需要设置userid,否则会自动生成.设置userid的代码如下:

[_radarManager.userId = @"baidu_mapsdk_radarid"]; 

3、通过添加radar delegate获取自动上传时的位置信息,以及获得雷达操作结果,代码如下:

[_radarManager  addRadarManagerDelegate:self];//添加radar delegate

在不需要时,需要移除radar delegate,否则会影响内存的释放。代码如下:

[_radarManager  removeRadarManagerDelegate:self];

//不用需移除,否则影响内存释放

四、位置信息上传

周边雷达功能模块,支持将用户的位置等信息上传到百度LBS云服务,从而实现应用内部及应用之间的位置信息查看。

目前支持单次位置信息上传和位置信息连续自动上传两种模式。

单次位置信息上传的核心代码如下:

//构造我的位置信息

BMKRadarUploadInfo *myinfo = [[BMKRadarUploadInfo alloc]init];

myinfo.extInfo = @"hello,world";

//扩展信息

myinfo.pt= CLLocationCoordinate2DMake(39.916,116.404);

//我的地理坐标

//上传我的位置信息BOOL res=[_radarManageruploadInfo  Request:myinfo];

if(res){

NSLog(@"upload 成功");

}else{

NSLog(@"upload 失败");

}

位置信息连续自动上传的核心代码如下:

//启动自动上传用户位置信息,需要实现getRadarAutoUploadInfo获取我的位置信息

[_radarManager  startAutoUpload:5];

五. 周边位置检索

利用周边雷达功能,可实现周边(处于同一个周边雷达关系内)用户位置信息检索的能力。 检索过程支持距离、时间等约束条件;返回结果支持按照距离、时间远近的排序。

第一步,发起检索请求,核心代码如下:

BMKRadarNearbySearchOption *option = [[BMKRadarNearbySearchOption  alloc]init];

option.radius=8000;

//检索半径

option.sortType=BMK_RADAR_SORT_TYPE_DISTANCE_FROM_NEAR_TO_FAR;

//排序方式

option.centerPt =_CLLocationCoordinate2DMake(39.916,116.404);

//检索中心点

//发起检索

BOOL res = [_radarManagergetRadarNearbySearch  Request:option];

if(res){

NSLog(@"get 成功");

}else{

NSLog(@"get 失败");

}

第二步,实现BMKRadarManagerDelegate回调方法获取结果,核心代码如下:

-(void)onGetRadarNearbySearchResult:(BMKRadarNearbyResult*)result error:(BMKRadarErrorCode)error{

NSLog(@"onGetRadarNearbySearchResult  %d", error);

if(error==BMK_RADAR_NO_ERROR){}

}

------------------------------------------------------------------

离线地图

百度地图iOS SDK开始支持矢量离线地图数据的下载、更新。

自v2.9.0起,官网不再支持地图离线包下载,所以SDK去掉“手动导入离线包接口”,SDK在线下载离线包接口仍维持不变。

离线地图的使用方法:

初始化离线地图代码如下

_offlineMap=[[BMKOfflineMap alloc]init];

_offlineMap.delegate=self;

新增离线地图下载接口start,更新接口update等来实现离线地图在线下载和更新,接口参数为cityID,cityID表示城市的数字标识,每个城市唯一,示例代码如下:

NSArray *records=[_offlineMap searchCity:@"北京"];

BMKOLSearchRecord *oneRecord = [records objectAtIndex:0];

[_offlineMap start:oneRecord.cityID];

在下载或更新过程中会通过BMKOfflineMapDelegate来回调信息,还提供getOfflineCityList接口来查询支持离线地图数据的所有城市,以及getHotCityList接口来查询热点城市

注意:

1、离线地图功能属于“基础地图”这个功能模块,开发者使用时请注意选择;

2、完整的示例代码请参考相关下载demo工程中的OfflineDemoViewController.m文件;

------------------------------------------------------------------

定位功能

1.简介

由于系统原因,iOS不允许使用第三方定位,因此地图SDK中的定位方法,本质上是对原生定位的二次封装。通过封装,开发者可更便捷的使用。此外,地图SDK中还提供了相应的定位图层(支持定位三态效果),帮助开发者显示当前位置信息。

注:自iOS8起,系统定位功能进行了升级,SDK为了实现最新的适配,自v2.5.0起也做了相应的修改,开发者在使用定位功能之前,需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):

NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述

NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述

2.获取位置信息

定位功能可以和地图功能分离使用,单独的定位功能使用方式如下:

-(void)viewDidLoad{

//初始化

BMKLocationService  _locService = [[BMKLocationService alloc]init];

_locService.delegate = self; 

//启动LocationService

[_locService startUserLocationService];

}

//实现相关delegate 处理位置信息更新

//处理方向变更信息

-(void)didUpdateUserHeading:(BMKUserLocation*)userLocation{

//NSLog(@"heading is %@",userLocation.heading);

}

//处理位置坐标更新

-(void)didUpdateBMKUserLocation:(BMKUserLocation*)userLocation{

//NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);

}

展示定位信息

展示定位信息的功能位于“地图和覆盖物”这个功能模块,开发者在使用时要注意选择。核心代码如下:(完整信息请参考Demo)

//普通态

//以下_mapView为BMKMapView对象

_mapView.showsUserLocation=YES;

//显示定位图层

[_mapView updateLocationData:userLocation];

------------------------------------------------------------------

根据 Swift 集成百度地图 API

1. 配置开发环境

第一步、导入地图SDK,参考配置开发环境

第二步、Swift编译配置

首先,新建桥接头文件(放在工程目录下),这里命名为 BMKSwiftDemo-Bridging-Header.h,在该头文件中import需要的库文件,代码如下:

#import//引入base相关所有的头文件#import//引入地图功能所有的头文件#import//引入检索功能所有的头文件#import//引入云检索功能所有的头文件#import//引入定位功能所有的头文件#import//引入计算工具所有的头文件#import//引入周边雷达功能所有的头文件#import//只引入所需的单个头文件

然后,在 TARGETS->Build Phases-> Swift Compiler - Code Generation -> Objective-C Briding Header 中输入桥接文件的路径(该路径要和桥接头文件所在的目录一致),如下图所示:

Hello Swift BaiduMap !

一、初始化BMKMapManager 在您的AppDelegate.swift文件中添加对BMKMapManager的声明和初始化,并填入您申请的授权Key,示例如下

var _mapManager:BMKMapManager ? 

func application(application:UIApplication,didFinishLaunchingWithOptions launchOptions:[NSObject:AnyObject] ? )->Bool {

_mapManager = BMKMapManager()

// 如果要关注网络及授权验证事件,请设定generalDelegate参数

let ret = _mapManager ? .start("在此处输入您的授权Key",generalDelegate:self) 

if ret == false {

NSLog("manager start failed!")

} return  true }

二、创建BMKMapView 在您的ViewController.swift文件中添加BMKMapView的创建代码,示例如下

var_mapView:BMKMapView ? 

override func viewDidLoad({

super.viewDidLoad() 

_mapView = BMKMapView(frame:CGRect(x:0,y:0,width:self.view.frame.width,height:self.view.frame.height))

self.view.addSubview(_mapView!)}

自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate,代码如下:

override func viewWillAppear(animated:Bool {

super.viewWillAppear(animated)

_mapView ? .viewWillAppear()

_mapView ? .delegate = self

// 此处记得不用的时候需要置nil,否则影响内存的释放

}

override func viewWillDisappear(animated:Bool{

super.viewWillDisappear(animated)

_mapView ? .viewWillDisappear()

_mapView ? .delegate = nil

// 不用时,置nil

}

三、编译,运行,效果如下图所示:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容