欢迎光临
我们一直在努力

一个现实且有趣的配送导航问题(路经规划问题),看看HERE地图有什么方案

问题:

一个骑手需要从取货点(中转站仓库)取5件货物送到A/B/C/D/E5个目的地,五个地点之间相互距离在1-3KM左右,使用HERE地图开发导航应用,该如何实现最优路线呢?

HERE解决方案参考:

一、场景建模与方案选型

针对"单一取货点 + 5件货物 + 5个近距离送达点(1-3km)"的同城轻量配送场景,核心是先求解最优访问顺序,再生成可导航的路段。HERE 地图有两个 API 可以组合使用,也有一个 API 可以一站式解决:

方案 适用 API 优势 推荐度
轻量级(单车单人) Waypoints Sequence API v8​ + Routing API v8​ 调用简单,专为"给定途经点求最优顺序"设计 ⭐⭐⭐⭐⭐
重量级(带容量/时间窗/多趟) Tour Planning API v3​ 一次性返回优化序列、时间窗、车辆调度 ⭐⭐⭐⭐

小提示:场景是 1 个骑手、5 件货物、5 个目的地,且距离很近(1-3km),首选 Waypoints Sequence API v8——它明确支持"基于道路网限制和交通模式,计算最小化总行程时间或总距离的最佳途经点顺序"。

如果骑手是两轮/电动配送车,Routing API 的 transportMode=scooter是城内短途配送的最佳模式:默认限速 60km/h、自动规避高速公路、仅使用摩托车可通行道路。

二、方案架构

中转站(取货) ──► [Waypoints Sequence API 求最优顺序] ──► A→C→B→E→D (示意)
                                                        │
                                                        ▼
                                               [Routing API v8 逐段导航]
                                                        │
                                                        ▼
                          中转站 ──► A ──► C ──► B ──► E ──► D ──► (可选返程中转站)

两步调用策略:

  • 第一步:调用 Waypoints Sequence API,输入中转站 + A/B/C/D/E 五个点,获得优化后的访问顺序。

  • 第二步:用优化后的顺序,调用 Routing API v8(transportMode=scooter),获取每段可导航路线(含转向指令、距离、耗时)。

  • 三、API 调用详解

    API ①:Waypoints Sequence API v8 —— 求解最优送货顺序

    端点

    POST https://wps.hereapi.com/v8/waypointssequence

    请求体示例(坐标用占位符,实际接入时替换为真实经纬度)

    {
    "substitutions": {
    "start": "12.96844,77.59620"
    },
    "jobs": [
    { "id": "A", "location": "12.97190,77.59320" },
    { "id": "B", "location": "12.97544,77.60100" },
    { "id": "C", "location": "12.96670,77.58890" },
    { "id": "D", "location": "12.96230,77.60510" },
    { "id": "E", "location": "12.96980,77.59780" }
    ],
    "mode": "fastest;scooter;traffic:enabled",
    "return": "polyline,travelSummary"
    }

    关键参数说明

    参数 取值 说明
    substitutions.start 中转站坐标 骑手出发地
    jobs[].id A/B/C/D/E 货物目的地标识
    jobs[].location lat,lng 各目的地坐标
    mode fastest; scooter; traffic:enabled 最快路线 + 滑板车/摩托车模式 + 启用实时交通
    return polyline,travelSummary 返回路线几何与行程摘要

    典型返回值

    {
    "routes": [{
    "waypointsSequence": ["start", "C", "A", "E", "B", "D"],
    "distance": 8420,
    "travelTime": 1860,
    "trafficTime": 1860,
    "polyline": "…"
    }]
    }

    小提示:核心输出 waypointsSequence即为优化后的送货优先级顺序。基于 HERE 的道路网络与实时交通,该顺序使总行程时间或总距离最小。

    API ②:Routing API v8 —— 生成逐段导航路线

    拿到顺序后(假设为 中转站→C→A→E→B→D),调用 Routing API 获取每段的可导航路线。

    端点

    GET https://router.hereapi.com/v8/routes

    请求示例(以"中转站→C→A"第一段为例)

    https://router.hereapi.com/v8/routes
      ?origin=12.96844,77.59620
      &destination=12.96670,77.58890
      &transportMode=scooter
      &vehicle[speedCap]=16.66
      &avoid[features]=controlledAccessHighway
      &return=polyline,travelSummary,actions,instructions
      &apikey=YOUR_API_KEY

    关键参数说明

    参数 取值 说明
    transportMode scooter 两轮机踏车/摩托车模式,适合同城配送
    vehicle[speedCap] 16.66 限速 60km/h(默认值,可按实际调整)
    avoid[features] controlledAccessHighway 规避高速公路(scooter 模式默认已规避)
    return polyline,travelSummary,actions,instructions 返回路线几何、行程摘要、转向动作、文字指令

    典型返回值片段

    {
    "routes": [{
    "sections": [{
    "travelSummary": {
    "duration": 320,
    "length": 1450
    },
    "actions": [
    { "type": "depart", "instruction": "向西北方向出发", "length": 120 },
    { "type": "turn", "direction": "left", "instruction": "左转进入X路", "length": 380 },
    { "type": "arrive", "instruction": "到达目的地C" }
    ]
    }]
    }]
    }

    小提示:通过遍历优化后的顺序,对相邻两点逐段调用该 API,即可获得骑手全程的转向导航指令。

    API ③(可选):Tour Planning API v3 —— 一站式优化

    如果未来业务扩展到多骑手、车辆容量限制、时间窗约束、需从中转站多次取货,则直接使用 Tour Planning API。HERE 官方博客中有一个几乎完全匹配你场景的案例:1 辆 scooter、容量 3、从 Cafe 取出 5 件货物配送到 5 个客户,API 自动规划出"送 3 单→回 Cafe 重新装载→送剩余 2 单"的序列。

    端点

    POST https://tourplanning.hereapi.com/v3/problems?apiKey=YOUR_API_KEY

    请求体核心结构

    {
    "plan": {
    "jobs": [
    { "id": "A", "location": {"lat": 12.97190, "lng": 77.59320}, "demand": [1], "serviceTime": 120 },
    { "id": "B", "location": {"lat": 12.97544, "lng": 77.60100}, "demand": [1], "serviceTime": 120 },
    { "id": "C", "location": {"lat": 12.96670, "lng": 77.58890}, "demand": [1], "serviceTime": 120 },
    { "id": "D", "location": {"lat": 12.96230, "lng": 77.60510}, "demand": [1], "serviceTime": 120 },
    { "id": "E", "location": {"lat": 12.96980, "lng": 77.59780}, "demand": [1], "serviceTime": 120 }
    ]
    },
    "fleet": {
    "types": [{
    "profile": "vehicle",
    "amount": 1,
    "capacity": [5],
    "costs": { "distance": 0.004, "time": 0.0024, "fixed": 22 },
    "id": "rider_1",
    "shifts": [{
    "start": { "location": {"lat": 12.96844, "lng": 77.59620}, "time": "2026-07-22T08:00:00+08:00" },
    "end": { "location": {"lat": 12.96844, "lng": 77.59620}, "time": "2026-07-22T18:00:00+08:00" }
    }]
    }],
    "profiles": [{ "name": "vehicle", "type": "scooter" }]
    }
    }

    返回值核心结构(摘取自 HERE 官方动态重排示例)

    {
    "statistic": {
    "cost": 46.27,
    "distance": 30374,
    "duration": 4672,
    "times": { "driving": 3172, "serving": 1500, "waiting": 0, "break": 0 }
    },
    "tours": [{
    "vehicleId": "rider_1_1",
    "stops": [
    { "location": {"lat": 12.96844, "lng": 77.59620}, "time": { "departure": "…" } },
    { "location": {"lat": "…", "lng": "…"}, "time": { "arrival": "…", "departure": "…" },
    "load": [4], "activities": [{ "jobId": "A", "type": "delivery" }] },
    { "location": {"lat": "…", "lng": "…"}, "time": { "arrival": "…", "departure": "…" },
    "activities": [{ "jobId": "C", "type": "delivery" }] },
    "… 其余停靠点 …",
    { "location": {"lat": 12.96844, "lng": 77.59620}, "time": { "arrival": "…" } }
    ]
    }]
    }

    返回值关键字段解读

    字段 含义
    tours[].stops[].activities[].jobId 该停靠点对应的送货任务(即 A/B/C/D/E 的顺序)
    tours[].stops[].time.arrival/ departure 到达/离开该点的时间
    statistic.distance 总行程距离(米)
    statistic.duration 总时长(秒)
    statistic.times.driving/ serving 驾驶时间 / 服务(交付)时间

    四、完整业务流程

      1. 从中转站系统读取 5 件货物的目的地坐标 A/B/C/D/E              

      2. 调用 Waypoints Sequence API → 获得最优顺序 (如 C→A→E→B→D)

      3. 按优化顺序逐段调用 Routing API (transportMode=scooter)    

          → 获得每段的转向导航指令、距离、预计耗时                    

      4. 拼接为完整导航路线,推送给骑手 APP                          

      5. (可选)调用 Routing API 计算返程路线回到中转站             

    五、方案要点总结

    为什么这样设计?

    Waypoints Sequence API​ 是 HERE 专门用于"求解途经点最优顺序"的服务,基于道路网和交通模式最小化总时间/距离——完美匹配"5 个点求访问优先级"的需求

    Routing API v8 的 scooter 模式针对城内两轮机踏车优化,默认 60km/h 限速、自动避高速,契合同城短途配送

    坐标获取:A/B/C/D/E 及中转站的坐标可通过 HERE Geocoding & Search API 从地址反查得到,或直接从业务系统读取已有经纬度

    生产环境建议:

    若送货时间窗严格(如"10:00-11:00 前送达 A"),直接升级到 Tour Planning API v3,它原生支持时间窗、优先级、车辆容量

    若骑手在配送途中需动态插入新订单,Tour Planning API 支持基于当前位置重规划

    中转站与 5 个点的距离虽近,但直线距离 ≠ 实际骑行距离,务必以 API 返回的道路距离为准来排序。

    大概方案如上所示,具体效果需要根据实测结果调整优化。

    如果使用Google或者其他地图,上述需求的方案又该怎么做呢?欢迎大家一起讨论一下。

    赞(0)
    未经允许不得转载:171主机测评 » 一个现实且有趣的配送导航问题(路经规划问题),看看HERE地图有什么方案
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址