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[]

字段路径类型可空单位/取值说明服务端字段
statusint10000 成功status
msgstring文本提示msg
traceIdstringTraceIdtrace_id
resultsarray<object>请求 pack 列表(与入参顺序一致)results
results[].errcodeintpack 错误码(0 正常)errcode
results[].errmsgstringpack 错误信息errmsg
results[].routesarray<object>候选路线列表(一般取第一个)routes
results[].routes[].distdouble总距离dist
results[].routes[].durationint总时长duration
results[].routes[].tagstring路线标签(如"推荐"等,服务端定义)tag
results[].routes[].geoListarray<object>结构化路径点(需 needPolyline=truegeo_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
traceIdstringTraceIdtrace_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[].modestringWALKING / 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);
}