首先实例化一个bmkmapview对象,司乘同显页面将通过此视图来展示司乘同显效果。
bmkmapview*mapview =[[bmkmapview alloc] initwithframe:self.view.frame];mapview.delegate= self;
实例化一个bmksctxorderinfo对象,用于设置订单的基本信息。
// 司机位置点cllocationcoordinate2d driverposition =bmkcoordtrans(cllocationcoordinate2dmake(39.91885,116.45932),bmk_coordtype_gps,bmk_coordtype_bd09ll);// 订单起点bmksctxpoipointinfo*startpoi =[[bmksctxpoipointinfo alloc] init];startpoi.coordinate=bmkcoordtrans(cllocationcoordinate2dmake(39.92144,116.53370),bmk_coordtype_gps,bmk_coordtype_bd09ll);// 订单终点bmksctxpoipointinfo*endpoi =[[bmksctxpoipointinfo alloc] init];endpoi.coordinate=bmkcoordtrans(cllocationcoordinate2dmake(40.04162,116.30654),bmk_coordtype_gps,bmk_coordtype_bd09ll);bmksctxorderinfo*order =[[bmksctxorderinfo alloc] initwithorderid:@"订单号"userid:@"厂商唯一标志符"driverid:@"订单对应的司机唯一标志符"driverposition:driverposition startpointinfo:startpoi endpointinfo:endpoi coordtype:bmk_sctx_coordtype_bd09ll];
如果需要自定义标注和路况纹理的图片,还需要实例化一个bmksctxpassengerdisplayoption对象;通过bmksctxpassengerdisplayoption对象设置标注与路线的显示样式。 包括小车、起终点的图片,路线宽度,路况纹理等。sdk均提供默认值,没有特殊需求,可以不设置
bmksctxpassengerdisplayoption*option =[[bmksctxpassengerdisplayoption alloc] init];// 线宽option.linewidth=5;// 3d小车图片数组nsmutablearray*car3dimages =[nsmutablearray array];nsinteger interval =45;// 初始小车图片车头向右,逆时针增加for(int begin =0; begin <360; begin = interval){nsstring*carimagename =[nsstring stringwithformat:@"sctx_car_%d.png",begin];uiimage*carimage =[uiimage imagenamed:carimagename];if(carimage){[car3dimages addobject:carimage];}}if(car3dimages && car3dimages.count>0){option.car3dimages= car3dimages;}
根据以上配置创建司乘同显服务对象,并设置司乘同显服务代理。
self.sctxmanager=[[bmksctxpassengermanager alloc] initwithmapview:mapview orderinfo:order displayoption:option];self.sctxmanager.delegate= self;
设置司乘同显代理后,开发者可以通过 bmksctxpassengermanagerdelegate回调接口获取剩余距离、预计剩余时间、服务错误码,查看修改订单终点信息回调状态、拉取到司机位置回调状态,以及查看司乘同显过程中,不同处理结果回调(如:首条路线绘制完成)。
/**剩余距离、预计剩余时间的回调接口,当二者有变化时,sdk通过此接口通知app@param manager 司乘同显服务管理对象@param remainingdistance 剩余距离(单位:米)@param estimatedtime 剩余时间(单位:秒)*/-(void)onroutestatuschangeformanager:(bmksctxpassengermanager*)managerremainingdistance:(nsuinteger)remainingdistanceestimatedtime:(nsuinteger)estimatedtime;/**sdk通过此方法将错误码回调给开发者@param manager 司乘同显服务管理对象@param error 错误对象*/-(void)onerroroccurredformanager:(bmksctxpassengermanager*)managerwitherror:(nserror*)error;/**sdk通过此方法告知开发者修改订单终点信息是否成功@param error 错误码,0:成功,其他:失败*/-(void)onupdateendpositioninforesult:(nserror*)error;/*** 成功拉取到司机位置的回调** @param driverposition 司机位置* @param updatetime 司机位置更新时间*/-(void)ondriverpositionupdated:(cllocationcoordinate2d)driverpositionupdatetime:(nstimeinterval)updatetime;/**司乘同显过程中,不同处理结果回调@param statuscode 状态码@param message 对应状态码信息信息*/-(void)onsynchronizationprocessresultcode:(bmksctxprocessstatuscode)statuscodemessage:(nsstring*)message;
-(void)viewwillappear:(bool)animated {[superviewwillappear:animated];[self.mapview viewwillappear];// 恢复司乘同显服务[self.sctxmanager onresume];}-(void)viewwilldisappear:(bool)animated {[superviewwilldisappear:animated];[self.mapview viewwilldisappear];// 暂停司乘同显服务[self.sctxmanager onpause];self.sctxmanager= nil;}
上一篇
下一篇
本篇文章对您是否有帮助?