更新时间:2022-11-01
推荐上⻋点功能是基于用户定位的周边范围内的道路信息、步行距离、方向等信息实现的,该数据依托百度位置大数据的沉淀积累,推送合理上⻋点,降低接驾时间。
使用说明
推荐上⻋点功能对普通开发者仅提供试用配额。 配额提升针对合作用户。如果有配额需求,请在工单反馈给我们。
实现步骤
1引入头文件
推荐上车点检索功能使用的是地图SDK的检索功能,需要在工程中导入检索功能包
Objective-C
Swift
#import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
// 在桥接头文件BMKSwiftDemo-Bridging-Header中添加 #import <BaiduMapAPI_Base/BMKBaseComponent.h> #import <BaiduMapAPI_Search/BMKSearchComponent.h>
2初始化推荐上车点检索对象
Objective-C
Swift
BMKRecommendStopSearch *search = [[BMKRecommendStopSearch alloc] init];
let recommendStopSearch = BMKRecommendStopSearch()
3设置推荐上车点检索服务代理
Objective-C
Swift
recommendStopSearch.delegate = self;
recommendStopSearch.delegate = self;
4构造推荐上车点检索参数
Objective-C
Swift
BMKRecommendStopSearchOption *stopSearchOption = [[BMKRecommendStopSearchOption alloc] init]; // 推荐上车点经纬度 (必选) stopSearchOption.location = CLLocationCoordinate2DMake(40.047471, 116.31372);
let recommendStopOption = BMKRecommendStopSearchOption() // 推荐上车点的经纬度坐标(必选) recommendStopOption.location = CLLocationCoordinate2DMake(40.047471, 116.31372)
5发起推荐上车点检索请求
Objective-C
Swift
BOOL flag = [search recommendStopSearch:stopSearchOption]; if (flag) { NSLog(@"推荐上车点检索成功"); } else { NSLog(@"推荐上车点检索失败"); }
let flag = recommendStopSearch.recommendStopSearch(recommendStopOption); if flag { NSLog("推荐上车点检索成功") } else { NSLog("推荐上车点检索失败") }
6实现代理方法,获取检索结果
Objective-C
Swift
/** 推荐上车点检索结果回调 @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(@"检索失败"); } }
func onGetRecommendStopResult('''_''' searcher: BMKRecommendStopSearch, result recommendStopResult: BMKRecommendStopSearchResult, errorCode: BMKSearchErrorCode) { if error == BMK_SEARCH_NO_ERROR { //在此处理正常结果 } else { print("检索失败"); } }
7处理检索返回的结果
通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。具体使用示例可参照官方demo中的通过代理返回的error判断检索是否成功,如果检索成功,可通过解析result字段获取具体的结果。 具体使用示例可参照官方demo中的BMKRecommendStopSearchPage。BMKRecommendStopSearchResult类结构如下图:

说明:
BMKRecommendStopSearchResult 推荐上车点检索结果类

说明:
BMKRecommendStopSearchResult 推荐上车点检索结果类
BMKRecommendStopInfo 推荐上车点信息类
推荐上车点和全景结合使用
使用说明
推荐上车点和全景结合使用,可以更好地向乘客展示上车点附近的环境信息,帮助乘客更快速准确地找到上车点 ,如果有需求,请在工单反馈给我们。
效果参考:
https://mapopen-pub-iossdk.bj.bcebos.com/map/img/panorama.mp4
实现步骤
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); }]; }