浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
多路线选择
下载开发文档

算路、选路及上传路线,为了保持司机端和客户端路线一致,该部分接口由司乘同显导航SDK提供。

若乘客端业务需要实现乘客端选择算路路线,乘客端需要集成司乘同显导航SDK。

算路

示例代码如下:

// 设置起点位置
BNRoutePlanNode sNode = new BNRoutePlanNode(116.43370,39.92144, "起点", null, BNRoutePlanNode.CoordinateType.GCJ02);
// 设置终点位置
BNRoutePlanNode eNode = new BNRoutePlanNode( 116.30654,40.04162, "终点", null, BNRoutePlanNode.CoordinateType.GCJ02);
List<BNRoutePlanNode> list = new ArrayList<>();
list.add(sNode);
list.add(eNode);
BaiduNaviManagerFactory.getRoutePlanManager().routeplan(
list,
IBNRoutePlanManager.RoutePlanPreference.ROUTE_PLAN_PREFERENCE_DEFAULT,
null,
new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_START:
Toast.makeText(getApplicationContext(), "算路开始", Toast.LENGTH_SHORT).show();
break;
case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_SUCCESS:
Toast.makeText(getApplicationContext(), "算路成功", Toast.LENGTH_SHORT).show();
// 通过handler移除算路请求
BaiduNaviManagerFactory.getRoutePlanManager().removeRequestByHandler(this);
break;
case IBNRoutePlanManager.MSG_NAVI_ROUTE_PLAN_FAILED:
Toast.makeText(getApplicationContext(), "算路失败", Toast.LENGTH_SHORT).show();
// 通过handler移除算路请求BaiduNaviManagerFactory.getRoutePlanManager().removeRequestByHandler(this);
break;
default:
// nothing
break;
}
}
});
选路

发起算路后,在算路成功的回调里,能够获取3条路线信息,每一条路线信息包含路线长度、路线驾车时间、路线红绿灯个数等信息。以下介绍重要方法调用,完整代码请参考司机端demo中DemoRouteResultFragment中的使用。

示例代码如下:

Bundle bundle = (Bundle) msg.obj;
mRoutePlanItems = bundle.getParcelableArrayList(BNaviCommonParams.BNRouteInfoKey.INFO_TAB);
if (mRoutePlanItems != null) {
if (mRoutePlanItems.size() > 0 && mRoutePlanItems.get(0) != null) {
String pusLabelName = mRoutePlanItems.get(0).getPusLabelName();
// 路线驾车时间
int time = (int) (mRoutePlanItems.get(0).getPassTime() / 60);
// 路线长度
int lenth = (int) (mRoutePlanItems.get(0).getLength() / 1000.0f);
}
if (mRoutePlanItems.size() > 1 && mRoutePlanItems.get(1) != null) {
String pusLabelName = mRoutePlanItems.get(0).getPusLabelName();
// 路线驾车时间
int time = (int) (mRoutePlanItems.get(0).getPassTime() / 60);
// 路线长度
int lenth = (int) (mRoutePlanItems.get(0).getLength() / 1000.0f); }
if (mRoutePlanItems.size() > 2 && mRoutePlanItems.get(2) != null) {
String pusLabelName = mRoutePlanItems.get(0).getPusLabelName();
// 路线驾车时间
int time = (int) (mRoutePlanItems.get(0).getPassTime() / 60);
// 路线长度
int lenth = (int) (mRoutePlanItems.get(0).getLength() / 1000.0f);
}
}

根据回调的3条路线数据中的路线id指定要选择的路线

示例代码:

// 根据路线ID选择路线
BaiduNaviManagerFactory.getRouteResultManager().selectRoute(mRoutePlanItems.get(0).getRoutId());

确定使用选中的路线并上传到服务端,用于司机端发起算路导航。

示例代码:

BNOrderInfo info = new BNOrderInfo();
info.startNode = new BNRoutePlanNode(116.45932,39.91885, "起点", null, BNRoutePlanNode.CoordinateType.GCJ02);
info.pickupNode = ((SyncCustomDemo) getActivity()).mSNode;
info.endNode = ((SyncCustomDemo) getActivity()).mENode;
info.orderId = mOrderId;
info.driverId = "3333";
info.companyServerId = "88888888";
info.orderState = BNOrderState.SEND_PASSENGER;
BaiduNaviManagerFactory.getRouteResultManager().upLoadRouteInfo(
info, new IBNRequestListener() {
@Override
public void onRequestResult(final int i, String s, final String s1) {
if (getActivity() == null) {
return;
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (i != 200) {
Toast.makeText(getActivity(), "上传失败", Toast.LENGTH_LONG).show();
return;
}
try {
JSONObject object = new JSONObject(s1);
if (object.getInt("status") != 0) {
Toast.makeText(getActivity(), "上传失败", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
});

选路页面的生命周期管理

示例代码:

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
BaiduNaviManagerFactory.getRouteResultManager().onCreate(getActivity());
View view = inflater.inflate(R.layout.fragment_route_result, container, false);
mLayout = view.findViewById(R.id.container);
BaiduNaviManagerFactory.getMapManager().attach(mLayout);
return view;
}
@Override
public void onPause() {
super.onPause();
BaiduNaviManagerFactory.getMapManager().onPause();
BaiduNaviManagerFactory.getRouteResultManager().onPause();
}
@Override
public void onResume() {
super.onResume();
BaiduNaviManagerFactory.getMapManager().onResume();
BaiduNaviManagerFactory.getRouteResultManager().onResume();
}
@Override
public void onDestroy() {
super.onDestroy();
BaiduNaviManagerFactory.getMapManager().detach(mLayout);
BaiduNaviManagerFactory.getRouteResultManager().onDestroy();
}

上一篇

历史轨迹查询

下一篇

相关错误码

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