如何使用JxMaps获取已规划路线的距离?
嘿,刚好我对JxMaps的路线规划模块挺熟悉的,你不用费劲自己通过坐标算距离——JxMaps的API其实已经把路线的实际行驶距离打包好给你了,直接从DirectionsLeg里取就行!
核心思路
当你用DirectionsService.route()完成路线请求后,返回的DirectionsResult里包含了完整的路线信息,其中每个DirectionsLeg(可以理解为一段独立的路线段,比如A到B如果没有途经点就只有一个Leg)都自带distance属性,这是一个Distance对象,里面有两种格式的距离数据:
getText():带单位的友好文本,比如 "5.2公里" 或 "3.2英里"getValue():以米为单位的数值,方便后续计算
结合你的代码示例修改
我把获取距离的逻辑嵌到你的calculateDirection()方法里,你可以参考:
private void calculateDirection() { // 获取关联地图对象 final Map map = getMap(); // 实例化路线服务 DirectionsService directionsService = new DirectionsService(map); // 构建路线请求参数 DirectionsRequest request = new DirectionsRequest(); request.setOrigin(new LatLng(你的A点纬度, 你的A点经度)); request.setDestination(new LatLng(你的B点纬度, 你的B点经度)); request.setTravelMode(TravelMode.DRIVING); // 根据需求选出行方式 // 发起异步路线请求 directionsService.route(request, new DirectionsCallback() { @Override public void onSuccess(DirectionsResult result) { // 先判断是否有有效路线返回 if (result.getRoutes().length == 0) { System.out.println("未找到可用路线"); return; } DirectionsRoute route = result.getRoutes()[0]; // 处理单段路线(A到B无途经点) if (route.getLegs().length > 0) { DirectionsLeg firstLeg = route.getLegs()[0]; Distance distance = firstLeg.getDistance(); // 提取距离信息 String readableDistance = distance.getText(); int distanceInMeters = distance.getValue(); double distanceInKm = distanceInMeters / 1000.0; // 这里就可以用这些数据做业务处理了 System.out.println("路线距离:" + readableDistance); System.out.println("距离数值(米):" + distanceInMeters); System.out.println("距离数值(公里):" + String.format("%.2f", distanceInKm)); } } @Override public void onError(DirectionsStatus status) { System.out.println("路线规划失败:" + status.name()); } }); }
额外提醒:多途经点的总距离计算
如果你的路线有多个途经点,会拆分出多个DirectionsLeg,这时候需要遍历所有Leg累加距离:
// 在onSuccess方法内 int totalDistanceInMeters = 0; for (DirectionsLeg leg : route.getLegs()) { totalDistanceInMeters += leg.getDistance().getValue(); } double totalDistanceInKm = totalDistanceInMeters / 1000.0; System.out.println("总路线距离:" + String.format("%.2f公里", totalDistanceInKm));
千万注意:不要自己用坐标算直线距离,那和实际导航路线的距离差很多,API返回的distance是基于实际道路的行驶距离,才是你需要的准确值。
内容的提问来源于stack exchange,提问作者Pazdr0
相关产品推荐
相关产品推荐

