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

周边雷达

一、简介

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

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

iOS 百度地图v2.9.1 API 的详细使用(三)_第1张图片

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 中输入桥接文件的路径(该路径要和桥接头文件所在的目录一致),如下图所示:

iOS 百度地图v2.9.1 API 的详细使用(三)_第2张图片

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

}

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

iOS 百度地图v2.9.1 API 的详细使用(三)_第3张图片

你可能感兴趣的:(iOS 百度地图v2.9.1 API 的详细使用(三))