You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:42:05