Skip to main content
什么是距离矩阵?通行时间、API 与路径规划
Guides

什么是距离矩阵?通行时间、API 与路径规划

距离矩阵是多个起点与目的地之间的通行时间和距离的网格。了解距离矩阵 API 的工作原理、生产环境中的应用场景,以及哪些字段最关键。

Brent van der Heiden9 min read
#distance matrix#distance matrix api#travel time#routing#fleet dispatch#maps api

距离矩阵是多个起点和多个目的地之间的通行时间与距离网格。它是每一次「最近门店」排名、每一次配送派单决策、每一次路径优化求解背后的数据结构。每当一个应用需要按驾车时间从众多候选中挑出最优解,背后都有距离矩阵在工作。

本文讲解距离矩阵到底是什么,通行时间与直线距离的差别,矩阵在生产系统中出现在哪里,以及当输入规模超过零星几个点之后会咬人的那些坑。

距离矩阵的本质

最简形式下,距离矩阵就是一张二维表。行是起点,列是目的地,每个单元格存两个数:距离和时长。N 个起点 M 个目的地,矩阵就有 N×M 个单元格。25 名司机和 25 个工单的请求,单次调用就产生 625 个单元格。

这些单元格中的值来自一个遍历真实路网图的路径引擎。它从每个起点出发,挑选到每个目的地的最快路径,把路段成本加起来作为返回值。这与 haversine 计算根本不同:后者在两点之间画直线,无视建筑、河流和单行道的存在。

坐标对告诉你两个点在哪里。距离矩阵告诉你从一个点到另一个点真实需要付出什么代价。

距离 vs 时长

「距离」这个词常被用来指三种不同的数值,混淆它们是路径规划代码里最常见的 bug。

Haversine 距离 是两个经纬度对之间的大圆距离。它计算速度快、不需要网络调用,但对任何涉及驾车的任务都不适用。一个 2 公里的 haversine 距离一旦考虑到那条不能跨越的河流,就可能变成 7 公里的实际驾车。

路网距离 是真实可驾驶路径的长度。它考虑了单行道、转向限制和路网拓扑。这是距离矩阵 API 在 distance 字段中返回的值。

带交通的时长 是在当前或预测的交通条件下行程所需的时间。一段 12 公里的高速路段在凌晨 2 点是 6 分钟,在下午 5 点半是 25 分钟。重视 ETA 的生产系统会请求交通感知的时长,并传入出发时间,让路径引擎正确建模拥堵。

对于排序和派单,时长几乎总是优于距离。司机不会因为更近的工单远了 800 米就拒绝它,只要那能省下 4 分钟。

距离矩阵出现在哪里

距离矩阵安静地驱动着大多数物流和位置相关功能。

  • 配送派单:每个待处理订单与每位可用司机进行匹配。调度器选择时长最低且满足车容与班次约束的单元格
  • 车队调度与再平衡:网约车和最后一公里平台每隔几秒就在车辆与需求区之间计算矩阵,让车流贴近乘客
  • 门店与场所定位排序:与其按 haversine 返回最近的 5 家门店,不如从用户位置到候选门店计算一个小矩阵,按驾车时间排序
  • 大规模 ETA 计算:同时存在多个订单的市场会把 ETA 批量打包成矩阵调用,而不是发起数千次单条路径请求
  • VRP 求解器:车辆路径问题求解器(OR-Tools、jsprit、商业优化器)需要一份完整成本矩阵作为输入。求解结果的质量取决于输入矩阵的质量
  • 选址与片区规划:分析师在候选地点和客户聚类之间计算矩阵,挑选总驾车时间最短的仓库

在所有这些场景里,矩阵都是批量计算的基本原语。它让系统可以推理「众多候选中的最优」,而不必承担 N×M 次独立路径调用的成本。

生产环境中的坑

距离矩阵第一天用很简单,之后会越来越难。

默认是不对称的。 真实路网有单行道、隔离带和不对称的转向成本。(A, B) 单元格几乎不会等于 (B, A)。为了省内存把矩阵当对称处理,是调度系统逆行路径的经典 bug 来源。

N×M 的成本曲线。 100×100 矩阵就是 10,000 个单元格,500×500 就是 250,000 个。成本和延迟以二次方增长。大多数生产系统把矩阵分块(50×50 或 100×100),并行请求,并缓存不常变化的结果,例如固定仓库与固定门店之间的矩阵。

时段差异。 凌晨 3 点计算的矩阵在下午 5 点不再有效。如果调度逻辑依赖交通,要么在决策时请求交通感知矩阵,要么预先计算少量按时段分桶的矩阵(早高峰、平峰、晚高峰)并选用合适的一份。

批量与限流。 距离矩阵 API 按元素计费而不是按请求计费,大多数厂商对单次调用大小有上限。要从第一天起就规划好分块和反压机制,而不是在规模上来时才发现。

输入坐标质量决定一切。 矩阵的好坏取决于喂给它的坐标。一个落在隔离带另一侧的地理编码会产生离谱的时长。在进入矩阵请求之前,先校验输入坐标。

MapAtlas 中的距离矩阵

MapAtlas Distance Matrix API 在真实的欧洲及全球道路网络上计算完整的 N×M 通行时间与距离矩阵。它支持轿车、卡车、自行车和行人画像,接受带出发时间的交通感知请求,并面向真实调度与优化负载所需的批量规模设计。

对于排序之外的负载,Distance Matrix API 与 Optimize Route API 自然搭配,后者接收一份矩阵和一组站点,返回总驾车时间最短的有序路线;它也与 Isochrone API 搭配,先用「X 分钟内可达」过滤器收缩候选集,再调用矩阵。

距离矩阵不光鲜,它只是一张数字网格。但正是这张数字网格,把「找出众多候选中的最优」从 N×M 次路径规划噩梦变成一次批量请求,把这件事做对,正是把真正的物流产品和「地图上插五个图钉」的演示区分开来的关键。

常见问题

什么是距离矩阵?

距离矩阵是一组起点和一组目的地之间通行时间与距离的 N×M 网格。每个单元格回答一个问题:从起点 i 到目的地 j 需要多长时间,距离多远。现代距离矩阵 API 在真实道路网络上计算这些值,而不是按直线距离计算,因此结果会考虑单行道、转向限制和可通行的几何路径。

距离和时长有什么区别?

距离是沿道路网络行进的长度,单位是米或公里。时长是行进所需的时间,以秒计,受限速、交通和道路等级影响。两者不可互换。两条路线可能距离相同但时长差异巨大,而大多数生产场景(ETA、调度、排序)关心的是时长。优秀的距离矩阵 API 会为每个单元格同时返回两者。

什么时候应该用距离矩阵而不是单条路径?

凡是需要在多个候选项之间比较时都应使用距离矩阵:从 50 家门店中挑选最近的 5 家、从 20 名可用司机中把订单派给最近的一位、为车辆路径规划求解器提供输入。N×M 次单条路径调用既慢又贵。矩阵接口在一次请求中返回相同的数据,并针对批量计算做了优化。

距离矩阵是对称的吗?

在真实路网中几乎从不对称。从 A 到 B 与从 B 到 A 的驾车通常不同,原因包括单行道、隔离带、转向限制以及不对称的交通流。生产级距离矩阵 API 返回完整的 N×M 网格,而不是三角矩阵。如果为了节省内存把矩阵折半,调度系统会把司机引向逆行车道。

觉得有用?分享给他人吧。

关于作者

Brent van der Heiden

作者

Brent van der Heiden

Co-Founder & CEO at MapAtlas

Brent built MapAtlas out of a conviction that developers deserve location APIs with fair pricing and genuine end-user privacy. He writes about geospatial infrastructure, AI search visibility, and how location data powers the products people rely on every day.

查看所有文章
返回博客