首先实例化一个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 {[super viewWillAppear:animated];[self.mapView viewWillAppear];// 恢复司乘同显服务[self.sctxManager onResume];}- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:animated];[self.mapView viewWillDisappear];// 暂停司乘同显服务[self.sctxManager onPause];self.sctxManager = nil;}
上一篇
下一篇
本篇文章对您是否有帮助?