周边雷达
一、简介
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
}
三、编译,运行,效果如下图所示: