Skip to content

路线规划(步行 / 骑行 / 驾车 / 公交) ​

保持 demo 中 RoutePlanningActivity 写法与回调。此处统一参数差异,并给出四类调用示例。

1 通用参数(RouteParams) ​

参数必/选说明
setOrigin("lng,lat")必起点(经度在前,字符串)
setDestination("lng,lat")必终点(经度在前,字符串)
setRouteplanType(String)驾车必驾车类型,取值:TYPE_PICKUP("0" 接驾) / TYPE_DROPOFF("1" 送驾)
setDepartureTime(Long)选出发时间(Unix 秒)
setNeedPolyline(Boolean)选驾车如需返回 geo_list(路径点)
setEtaStrategy(Integer)驾车选ETA 计算策略
setWaypoints("lng,lat;lng,lat")驾车选途径点坐标串,分号分隔,最多 12 个
setDrivingStrategy(String)驾车选驾车选择策略,常量:DRIVING_STRATEGY_DEFAULT("1") / _TIME_FIRST("2") / _SHORT_DISTANCE("5") / _HIGHWAY_FIRST("11") / _NO_HIGHWAY("13")
setShowFields("segments,cost")驾车选返回扩展信息,逗号分隔;segments 分级路况、cost 费用
setRouteNum(Integer)选驾车/公交返回方案个数(公交 1-10,默认 5)
setCity("城市名")公交必填仅公交需要城市;其他模式不必填
setStrategy(Integer)公交选公交策略(如 BUS_STRATEGY_MIN_TRANSFER)

注意:请求坐标是 "lng,lat" 字符串;返回路径点在 RouteResponse.results[].routes[].geo_list 里,字段名为 latitude/longitude。

2 调用示例(四种模式) ​

java
RoutePlanningService routeSvc = mapClient.getRoutePlanningService();

// —— 步行 ——
routeSvc.planWalkingRouteAPI(
    RouteParams.create()
        .setOrigin("116.2807,40.04811")
        .setDestination("116.30334,40.05203"),
    new RpcRequestUtils.Callback<RouteResponse>() { /* 回调同现有写法 */ }
);

// —— 骑行 ——
routeSvc.planBikingRouteAPI(
    RouteParams.create()
        .setOrigin("116.2807,40.04811")
        .setDestination("116.30334,40.05203"),
    new RpcRequestUtils.Callback<RouteResponse>() { /* 回调同现有写法 */ }
);

// —— 驾车(若需路径点请开启 needPolyline) ——
routeSvc.planDrivingRouteAPI(
    RouteParams.create()
        .setOrigin("116.2807,40.04811")
        .setDestination("116.30334,40.05203")
        .setRouteplanType(RouteParams.TYPE_DROPOFF)           // 必填:"0"接驾/"1"送驾
        .setDepartureTime(System.currentTimeMillis() / 1000)  // 可选
        .setNeedPolyline(true)                                // 返回 geo_list
        .setWaypoints("116.397128,39.916527;116.407396,39.904200") // 可选,最多12个
        .setDrivingStrategy(RouteParams.DRIVING_STRATEGY_TIME_FIRST) // 可选
        .setShowFields("segments,cost")                       // 可选:分级路况/费用
        .setRouteNum(3),                                      // 可选:返回方案数
    new RpcRequestUtils.Callback<RouteResponse>() { /* 回调同现有写法 */ }
);

// —— 批量驾车(一次提交多组起终点,统一回调) ——
java.util.List<RouteParams> batch = new java.util.ArrayList<>();
batch.add(RouteParams.create()
    .setOrigin("116.2807,40.04811")
    .setDestination("116.30334,40.05203")
    .setRouteplanType(RouteParams.TYPE_DROPOFF));
batch.add(RouteParams.create()
    .setOrigin("116.40,39.90")
    .setDestination("116.45,39.92")
    .setRouteplanType(RouteParams.TYPE_PICKUP));
routeSvc.planBatchDrivingRoutesAPI(
    batch,
    new RpcRequestUtils.Callback<RouteResponse>() { /* 回调同现有写法;results 顺序与入参一致 */ }
);

// —— 公交(city 必填,可选策略/方案数) ——
routeSvc.planBusRouteAPI(
    RouteParams.create()
        .setOrigin("116.2807,40.04811")
        .setDestination("116.30334,40.05203")
        .setCity("北京市")                                      // 必填
        .setStrategy(RouteParams.BUS_STRATEGY_MIN_TRANSFER)     // 可选
        .setRouteNum(3),                                        // 可选
    new RpcRequestUtils.Callback<BusRouteResponse>() { /* 回调同你现有写法 */ }
);

3 步行/骑行/驾车 — 响应结构(RouteResponse) ​

提示:v3 协议层级为 results[] → routes[]。results[] 为请求 pack(与批量入参顺序一致),routes[] 为该 pack 内的多条候选路线。距离/时长/路径点等位于 routes[]。

字段路径类型可空单位/取值说明服务端字段
statusint否—10000 成功status
msgstring是—文本提示msg
traceIdstring是—TraceIdtrace_id
resultsarray<object>是—请求 pack 列表(与入参顺序一致)results
results[].errcodeint否—pack 错误码(0 正常)errcode
results[].errmsgstring是—pack 错误信息errmsg
results[].routesarray<object>是—候选路线列表(一般取第一个)routes
results[].routes[].distdouble是米总距离dist
results[].routes[].durationint是秒总时长duration
results[].routes[].tagstring是—路线标签(如"推荐"等,服务端定义)tag
results[].routes[].geoListarray<object>是—结构化路径点(需 needPolyline=true)geo_list
results[].routes[].geoList[].latitudedouble是—路径点纬度latitude
results[].routes[].geoList[].longitudedouble是—路径点经度longitude

读取示例(取第一个 pack 的第一条路线:总距离/时长 + 起终点)

java
RouteResponse rr = data;
if (rr != null && rr.results != null && !rr.results.isEmpty()) {
  RouteResponse.Result r0 = rr.results.get(0);
  RouteResponse.Route route = (r0.routes != null && !r0.routes.isEmpty()) ? r0.routes.get(0) : null;
  if (route != null) {
    double distM = route.dist == null ? 0.0 : route.dist;
    int durS = route.duration == null ? 0 : route.duration;
    RouteResponse.GeoPoint start = (route.geoList != null && !route.geoList.isEmpty()) ? route.geoList.get(0) : null;
    RouteResponse.GeoPoint end = (route.geoList != null && !route.geoList.isEmpty()) ? route.geoList.get(route.geoList.size()-1) : null;
    String line = "路线: 距离=" + distM + "米 | 时长=" + durS + "秒"
                + " | tag=" + stringOrDash(route.tag)
                + " | 起点=" + stringOrDash(start == null ? null : start.latitude) + ","
                + stringOrDash(start == null ? null : start.longitude)
                + " | 终点=" + stringOrDash(end == null ? null : end.latitude) + ","
                + stringOrDash(end == null ? null : end.longitude);
    // tv.setText(line);
  }
}

批量驾车结果遍历:results[] 与入参 List<RouteParams> 一一对应,遍历时建议同时检查 results[i].errcode 是否为 0,再读取 results[i].routes[0]。


4 公共交通路径规划 — 响应结构(BusRouteResponse) ​

A. 顶层与方案字段

字段路径类型可空单位/取值说明服务端字段
statusint否—业务状态码,10000 成功status
msgstring是—文本提示msg
traceIdstring是—TraceIdtrace_id
resultsarray<object>是—方案列表results
results[].originstring是"lng,lat"方案起点origin
results[].destinationstring是"lng,lat"方案终点destination
results[].costint是分总费用(展示/100)cost
results[].durationint是秒总时长duration
results[].distancedouble是米总距离distance
results[].walkingDistancedouble是米总步行距离walking_distance
results[].segmentsarray<object>是—由步行/公交段组成segments

B. 分段(segments)与步行段(walking)

字段路径类型可空单位/取值说明服务端字段
results[].segments[].modestring是WALKING / TRANSIT段类型mode
results[].segments[].walkingobject是—步行段详情walking
results[].segments[].walking.originstring是"lng,lat"步行起点origin
results[].segments[].walking.destinationstring是"lng,lat"步行终点destination
results[].segments[].walking.distancedouble是米步行段距离distance
results[].segments[].walking.durationint是秒步行段时长duration
results[].segments[].walking.stepsarray<object>是—步行分步(可选)steps

C. 步行分步(walking.steps[])

字段路径类型可空单位/取值说明服务端字段
results[].segments[].walking.steps[].instructionstring是—指令(文字描述)instruction
results[].segments[].walking.steps[].roadstring是—道路名road
results[].segments[].walking.steps[].distancedouble是米分步距离distance
results[].segments[].walking.steps[].durationint是秒分步时长duration
results[].segments[].walking.steps[].polylinestring是"lng,lat;..."分步折线polyline
results[].segments[].walking.steps[].actionarray<string>是—行为(语义标签)action
results[].segments[].walking.steps[].actionCodearray<int>是—行为编码action_code
results[].segments[].walking.steps[].directionarray<string>是—方向描述direction

D. 公交段(metrobus[])与站点(BusStop)

字段路径类型可空单位/取值说明服务端字段
results[].segments[].metrobusarray<object>是—公交段(可能多条线路)metrobus
results[].segments[].metrobus[].namestring是—线路名(展示主文案)name
results[].segments[].metrobus[].idstring是—线路 IDid
results[].segments[].metrobus[].typeint是—线路类型(服务端定义)type
results[].segments[].metrobus[].departureStopobject是—上车站departure_stop
results[].segments[].metrobus[].departureStop.namestring是—上车站名name
results[].segments[].metrobus[].departureStop.idstring是—上车站 IDid
results[].segments[].metrobus[].departureStop.locationstring是"lng,lat"上车站坐标location
results[].segments[].metrobus[].arrivalStopobject是—下车站arrival_stop
results[].segments[].metrobus[].arrivalStop.namestring是—下车站名name
results[].segments[].metrobus[].arrivalStop.idstring是—下车站 IDid
results[].segments[].metrobus[].arrivalStop.locationstring是"lng,lat"下车站坐标location
results[].segments[].metrobus[].startStationstring是—首发站名(线路端点)start_station
results[].segments[].metrobus[].terminalStationstring是—终到站名(线路端点)terminal_station
results[].segments[].metrobus[].distancedouble是米本段距离distance
results[].segments[].metrobus[].durationint是秒本段时长duration
results[].segments[].metrobus[].costint是分本段费用cost
results[].segments[].metrobus[].firstTimestring是"HH:mm"首班时间first_time
results[].segments[].metrobus[].lastTimestring是"HH:mm"末班时间last_time
results[].segments[].metrobus[].polylinestring是"lng,lat;..."公交折线polyline
results[].segments[].metrobus[].viaStopsCountint是—途经站数量via_stops_count
results[].segments[].metrobus[].viaStopsarray<object>是—途经站列表via_stops
results[].segments[].metrobus[].viaStops[].namestring是—站名name
results[].segments[].metrobus[].viaStops[].idstring是—站点 IDid
results[].segments[].metrobus[].viaStops[].locationstring是"lng,lat"坐标location

备注:距离统一为米、时长为秒、费用为分;坐标字符串统一 "lng,lat";折线统一 "lng,lat;lng,lat;..."。

读取示例(Top1 方案 + 第一段公交上/下车站)

java
BusRouteResponse br = data;
if (br != null && br.results != null && !br.results.isEmpty()) {
  BusRouteResponse.BusRouteResult r0 = br.results.get(0);
  String cost = (r0.cost == null) ? "-" : String.format(java.util.Locale.US, "%.2f元", r0.cost / 100.0);
  int mins = r0.duration == null ? 0 : r0.duration / 60;

  String lineName = "-", onStop = "-", offStop = "-";
  if (r0.segments != null) {
    for (BusRouteResponse.BusSegment seg : r0.segments) {
      if ("TRANSIT".equals(seg.mode) && seg.metrobus != null && !seg.metrobus.isEmpty()) {
        BusRouteResponse.BusDetail bus = seg.metrobus.get(0);
        lineName = stringOrDash(bus.name);
        onStop = (bus.departureStop != null) ? stringOrDash(bus.departureStop.name) : "-";
        offStop = (bus.arrivalStop != null) ? stringOrDash(bus.arrivalStop.name) : "-";
        break;
      }
    }
  }

  String line = "公交Top1: 起点=" + stringOrDash(r0.origin)
              + " | 终点=" + stringOrDash(r0.destination)
              + " | 费用=" + cost + " | 总时长≈" + mins + "分钟"
              + " | 第一段=" + lineName + "(" + onStop + " → " + offStop + ")";
  // tv.setText(line);
}