ios地图sdk | 百度地图api sdk-凯发k8官方旗舰厅

浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
步行导航
下载开发文档
步行导航简介

ios 地图sdk自v4.2.0版本起新增步行导航功能,支持普通步行导航、步行ar导航、偏航纠偏等导航功能。

步行导航功能实现
1. 注册监听

步行导航提供给开发者监听,步行多路线规划回调、步行导航算路回调、导航状态回调、诱导信息回调、tts语音播报文本。

使用方法如下:

bmkwalknavigationmanager*manager =[bmkwalknavigationmanager sharedmanager];
manager.walknavimode=bmk_walk_navigation_mode_walk_normal;
manager.enablemultiroute=yes;// 设置是否支持多路线 since 6.5.4
manager.routeplandelegate= self;// 设置多路线规划回调,支持关键字 since 6.5.4
manager.routeguidancedelegate= self;// 设置导航状态信息回调
manager.ttsplayerdelegate= self;//设置语音播报回调
manager.managerdelegate= self;// 设置导航状态回调,如退出导航
manager.calcroutedelegate= self;// 算路回调,只支持经纬度算路,区别于多路线规划回调 since 6.5.4
manager.locationauthorizationdelegate= self;
// 启用后台位置指示器,进入后台时保留被授予的临时访问权限(精确位置)
[manager showsbackgroundlocationindicator:yes];
2. 引擎初始化

开始步行导航前,需要进行步行导航引擎初始化。

使用方法如下:

//由开发者提供导航页面
walknaviviewcontroller*controller =[[walknaviviewcontroller alloc] init];
//初始化
bool inited =[[bmkwalknavigationmanager sharedmanager] initnaviengine:controller];
if(inited){
//初始化成功,发起算路...
}
3. 发起算路

引擎初始化成功之后,发起导航算路。since 6.5.4版本后支持多路线路线规划,规划后用户可以选择合适的路线进行导航使用方法如下:

bmkwalknavilaunchparam*param =[[bmkwalknavilaunchparam alloc] init];
param.startpoint= _startannotation.coordinate;//设置起点
param.endpoint= _endannotation.coordinate;//设置终点
[[bmkwalknavigationmanager sharedmanager] routeplanwithparams:param];
4. 弹出导航页面

算路成功后,即可以执行弹出导航页面(即引擎初始化时传入的参数controller)操作,since 6.5.4版本后,可先展示多条路线,选择路线后进入导航页面。使用方法如下:

#pragma mark -bmkwalkcyclerouteplandelegate
/**
开始算路
*/
-(void)onrouteplanstart:(bmkwalkcyclenavigationtype)navitype {
nslog(@"sdk-开始步行路线规划");
}
-(void)onrouteplanresult:(bmkwalkcyclerouteplanerrorcode)errorcode navitype:(bmkwalkcyclenavigationtype)navitype{
if(errorcode ==bmk_walk_cycle_routeplan_result_success){
nslog(@"sdk-算路成功");
if(navitype ==bmk_walk_cycle_navigation_type_walk){
[self.mapview removeoverlays:self.mapview.overlays];
// 展示多路线
_routepolylines =[[bmkwalknavigationmanager sharedmanager] displayrouteplanresult:_mapview];
if(_routepolylines.count==1){
// 只有一条时直接使用该路线进行引擎算路,成功后进入导航页面
[[bmkwalknavigationmanager sharedmanager] navicalcroute:0];
}
}
}else{
nslog(@"sdk-步行路线规划失败");
}
}
/// 自定义多路线样式
-(bmkoverlayview*)mapview:(bmkmapview*)map viewforoverlay:(id<bmkoverlay>)overlay {
/// 步行多路线polyline
if([overlay iskindofclass:[bmkpolylineclass]]&&[bmkwalknavigationmanager sharedmanager].enablemultiroute){
bmkpolylineview* polylineview =[[bmkpolylineview alloc] initwithoverlay:overlay];
polylineview.linewidth=10.0;
if(_isfirstroute){
_isfirstroute =no;
polylineview.strokecolor=[[uicolor alloc] initwithred:0green:0blue:1alpha:0.7];
}else{
polylineview.strokecolor=[[uicolor alloc] initwithred:0green:0blue:1alpha:0.4];
}
[_routepolylineviews addobject:polylineview];
return polylineview;
}
return nil;
}
/// 选路
-(void)mapview:(bmkmapview*)mapview onclickedbmkoverlayview:(bmkoverlayview*)overlayview {
if([overlayview iskindofclass:[bmkpolylineviewclass]]){
bmkoverlayview*polylineview =(bmkoverlayview*)overlayview;
nsinteger idx =[_routepolylines indexofobject:polylineview.overlay];
if(idx >=0&& idx < _routepolylines.count){
// 按照索引路线进行导航引擎算路,算路成功后进入导航
[[bmkwalknavigationmanager sharedmanager] navicalcroute:idx];
for(int i =0; i < _routepolylines.count; i){
bmkpolylineview*polylineview = _routepolylineviews[i];
if(idx == i){
polylineview.strokecolor=[[uicolor alloc] initwithred:0green:0blue:1alpha:0.7];
}else{
polylineview.strokecolor=[[uicolor alloc] initwithred:0green:0blue:1alpha:0.4];
}
}
}
}
_routepolylines = nil;
[_routepolylineviews removeallobjects];
[self.mapview removeoverlays:self.mapview.overlays];
}
#pragma mark -<bmkwalknavicalcroutedelegate>
/// 引擎算路结果
-(void)onnavicalcrouteresult:(bmkwalkcyclerouteplanerrorcode)errorcode navitype:(bmkwalkcyclenavigationtype)navitype {
if(errorcode ==bmk_walk_cycle_routeplan_result_success){
if(navitype ==bmk_walk_cycle_navigation_type_walk){
[[bmkwalknavigationmanager sharedmanager] startwalknaviwithparentcontroller:self ispush:yes];
}else{
[[bmkcyclenavigationmanager sharedmanager] startcyclenaviwithparentcontroller:self ispush:yes];
}
}else{
nslog(@"sdk-引擎算路失败 %zd", errorcode);
}
}
监听回调说明

步行导航和骑行导航均使用相同的代理回调,回调中参数 navitype 会告知开发者当前回调是步行导航还是骑行导航,请开发者注意区分。

bmkwalkcyclerouteplandelegate

步行导航路线规划代理类,成功后开发者可配合displayrouteplanresult展示并选择路线进行导航,算路失败发起导航无效。

@optional
/**
开始算路
*/
-(void)onrouteplanstart:(bmkwalkcyclenavigationtype)navitype;
/**
算路结果返回
@param errorcode 错误码
*/
-(void)onrouteplanresult:(bmkwalkcyclerouteplanerrorcode)errorcode navitype:(bmkwalkcyclenavigationtype)navitype;

bmkwalknavicalcroutedelegate

骑行、步行导航算路代理类,其中只有算路结果为成功的情况,开始骑行导航,算路失败发起导航无效。

/// 引擎算路结果
/// @param errorcode 错误码
-(void)onnavicalcrouteresult:(bmkwalkcyclerouteplanerrorcode)errorcode;
-(void)onnavicalcrouteresult:(bmkwalkcyclerouteplanerrorcode)errorcode navitype:(bmkwalkcyclenavigationtype)navitype;

bmkwalkcyclemanagerdelegate

步行、骑行导航管理代理类,提供退出导航等回调。

bmkwalkcyclerouteguidancedelegate

步行、骑行导航诱导信息代理类,提供12个回调方法,主要包括导航开始、结束、导航过程中偏航、偏航结束、诱导信息(包含诱导默认图标、诱导类型、诱导信息、剩余距离、时间、振动回调等)。 详见 bmkwalkcyclenavigationdelegates.h 头文件。

bmkwalkcyclettsplayerdelegate

骑行、步行导航tts语音播报代理类,此组件只提供导航过程中的文本输出,不包含语音播报功能,需要自行传入对应的语音回调,形成播报功能。 建议使用百度语音识别服务sdk。下载地址:

上一篇

骑行导航

下一篇

实时公交查询

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

网站地图