全部服务产品
开发者频道
定价
登录
推荐上车点
下载开发文档
推荐上车点

简介

推荐上⻋点功能是基于用户定位的周边范围内的道路信息、步行距离、方向等信息实现的,该数据依托百度位置大数据的沉淀积累,推送合理上⻋点,降低接驾时间。

使用说明

推荐上⻋点功能对普通开发者仅提供试用配额。 配额提升针对合作用户。如果有配额需求,请在工单反馈给我们。

实现步骤

1. 引入头文件

推荐上车点检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包

#import <BaiduMapAPI_Base/BMKBaseComponent.h>
#import <BaiduMapAPI_Search/BMKSearchComponent.h>
2. 初始化推荐上车点检索对象
BMKRecommendStopSearch *search = [[BMKRecommendStopSearch alloc] init];
3. 设置推荐上车点检索服务代理
recommendStopSearch.delegate = self;
4. 构造推荐上车点检索参数
BMKRecommendStopSearchOption *stopSearchOption = [[BMKRecommendStopSearchOption alloc] init];
// 推荐上车点经纬度 (必选)
stopSearchOption.location = CLLocationCoordinate2DMake(40.047471, 116.31372);
5. 发起推荐上车点检索请求
BOOL flag = [search recommendStopSearch:stopSearchOption];
if (flag) {
NSLog(@"推荐上车点检索成功");
} else {
NSLog(@"推荐上车点检索失败");
}
6. 实现代理方法,获取检索结果
/**
推荐上车点检索结果回调
@param searcher 检索对象
@param recommendStopResult  搜索结果
@param errorCode  错误号,@see BMKSearchErrorCode
*/
- (void)onGetRecommendStopResult:(BMKRecommendStopSearch *)searcher result:(BMKRecommendStopSearchResult *)recommendStopResult errorCode:(BMKSearchErrorCode)errorCode {
if (error == BMK_SEARCH_NO_ERROR) {
//在此处理正常结果
}
else {
NSLog(@"检索失败");
}
}
7. 处理检索返回的结果

通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。 具体使用示例可参照官方demo中的BMKRecommendStopSearchPage。BMKRecommendStopSearchResult类结构如下图:

pickuppoint.png

说明:

BMKRecommendStopSearchResult推荐上车点检索结果类
BMKRecommendStopInfo推荐上车点信息类
与全景结合使用

使用说明

推荐上车点和全景结合使用,可以更好地向乘客展示上车点附近的环境信息,帮助乘客更快速准确地找到上车点 ,如果有需求,请在工单反馈给我们。

效果参考:

实现步骤

1. 根据起点发起推荐上车点检索
// 初始化BMKRecommendStopSearch实例
BMKRecommendStopSearch *search = [[BMKRecommendStopSearch alloc] init];
// 推荐上车点检索的代理
search.delegate = self;
// 初始化请求参数类BMKRecommendStopSearchOption的实例
BMKRecommendStopSearchOption *stopSearchOption = [[BMKRecommendStopSearchOption alloc] init];
// 推荐上车点经纬度 (必选)
stopSearchOption.location = option.location;
/// 推荐上车点检索
BOOL flag = [search recommendStopSearch:stopSearchOption];
if (flag) {
NSLog(@"推荐上车点检索成功");
} else {
NSLog(@"推荐上车点检索失败");
}
2. 监听检索结果回调
/// 推荐上车点检索结果回调
/// @param searcher 搜索对象
/// @param recommendStopResult 搜索结果
/// @param errorCode 错误号,@see BMKSearchErrorCode
- (void)onGetRecommendStopResult:(BMKRecommendStopSearch *)searcher result:(BMKRecommendStopSearchResult *)recommendStopResult errorCode:(BMKSearchErrorCode)errorCode {
if (errorCode == BMK_SEARCH_NO_ERROR) {
//在此发起全景缩略图请求
}
}
3. 发起全景缩略图请求,参考全景静态图
NSString *urlString = [NSString stringWithFormat:@"https://api.map.baidu.com/panorama/v2?ak=您的ak&location=%f,%f&fov=180",info.location.longitude,info.location.latitude];
NSURL *listURL = [NSURL URLWithString:urlString];
NSURLSession * session= [NSURLSession sharedSession];
NSURLSessionDataTask * dataTask= [session dataTaskWithURL:listURL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if ([UIImage imageWithData:data]) {
//获取到全景缩略图
}
});
}];
[dataTask resume];
4. 展示全景图
// key 为在百度LBS平台上统一申请的接入密钥ak 字符串
self.panoramaView = [[BaiduPanoramaView alloc] initWithFrame:frame key:@"您的AK"];
[self.panoramaView setAgreePrivacy:YES];
// 为全景设定一个代理
self.panoramaView.delegate = self;
[self.view addSubview:self.panoramaView];
// 设定全景的清晰度, 默认为middle
[self.panoramaView setPanoramaImageLevel:ImageDefinitionMiddle];
// 根据坐标转成全景使用的百度墨卡托坐标系
CGPoint point = BMKConvertToBaiduMercatorFromBD09LL(_coordinate);
// 设定全景的pid, 这是指定显示某地的全景,也可以通过百度坐标进行显示全景
[self.panoramaView setPanoramaWithX:point.x Y:point.y];
5. 全景图上展示推荐上车点
/**
* @abstract 全景图加载完毕
* @param panoramaView 当前全景视图
* @param jsonStr 全景单点信息
*
*/
- (void)panoramaDidLoad:(BaiduPanoramaView *)panoramaView descreption:(NSString *)jsonStr {
// 不显示道路箭头
[panoramaView showDirectionArrow:NO];
// 关闭快速前进
[panoramaView enableFastMoving:NO];
// 百度墨卡托坐标
CGPoint point = BMKConvertToBaiduMercatorFromBD09LL(_coordinate);
// 添加全景overlay
[panoramaView addImageOverlayById:@"1" X:point.x Y:point.y Z:0 image:[UIImage imageNamed:@"stop_new"]];
}
6. 推荐上车点对应地图某个点的角度
(void)panoramaView:(BaiduPanoramaView *)panoramaView didReceivedMessage:(NSDictionary *)dict {
// 旋转角度
float heading = panoramaView.getPanoramaHeading;
float mapAngle = self.mapView.getMapStatus.fRotation;
if (mapAngle > 0) {
heading = ((heading - mapAngle) / 180.0 * M_PI);
} else {
heading = (heading / 180.0 * M_PI);
}
[UIView animateWithDuration:0.1 animations:^{
// 根据全景图旋转角度设置annotationView的角度
BMKAnnotationView *annotationView = [self.mapView viewForAnnotation:self.pointAnnotation];
annotationView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, heading);
}];
}

上一篇

天气服务

下一篇

地址编码

本篇文章对您是否有帮助?