路网计算逻辑

更新 2026-10-20 模型 v1.2.0 路网 2026-10-21

页面上的「参考里程」不是直线距离乘系数,是在真实路网上按最短路径算出来的。这一页讲清它怎么算、算得准不准、哪里算不准。数据本身见数据参考。

打开就有数,不用等

里程不是在页面打开时现算的。全国的道路网已经提前算成一张表,查线路时只是把那个数读出来—— 所以不会转圈、不会排队,也不会因为别人家的服务挂了就查不到。

代价是这张表一个月才更新一次:新开通的高速要等下个版本才进得来。 对运费估算来说,一条新高速影响的是几公里到几十公里,落在参考价的浮动区间里; 换来的是每次查询都立刻出结果。

里程是这么算出来的

  1. 01 用哪套道路:OpenStreetMap 的公开道路数据,涵盖高速、国道、省道、县乡道和轮渡。 只取到县乡道这一档——再细一级,里程只差 1.3%,打开速度却慢不少。
  2. 02 落到路上:把 3237 个城市、区县的中心点和 40,982 个乡镇,各自对应到离它最近的一条路。40 公里内都找不到路的,按「不通公路」处理。
  3. 03 两两先算好:任意两地之间的最短公路里程都提前算完,打开页面直接读数。 这就是上面说的「打开就有数」。
  4. 04 乡镇怎么算:4 万个乡镇两两配对算不过来。改成「先到最近的城市,再接城市之间的距离」—— 这样算出来的数只会略高一点,不会偏低。

算出来的精度

拿 37 条公开的高速公路营运里程做对照,平均绝对偏差 4.9%, 其中 24 条在 ±5% 以内,最大 17.4%。

线路公开里程旧模型本站偏差
北京 → 上海京沪高速 1220 km 1242 km 1172 km -3.9%
成都 → 拉萨318 国道,旧模型偏短 22% 2070 km 1610 km 1970 km -4.8%
上海 → 崇明同城跨海,旧模型只按直线算 95 km 51 km 93 km -2.1%
杭州 → 宁波少数偏长的一条 150 km 171 km 152 km +1.3%
广州 → 南宁旧模型偏长 11% 560 km 622 km 563 km +0.5%
重庆 → 贵阳最大偏差,走 G75 但借道了更短的国省道 460 km 414 km 380 km -17.4%

偏差多数为负(37 条里 31 条偏短),原因不是算漏了,而是目标不同: 导航给的是「最快路线」,宁可绕远也走高速;本站算的是「最短路线」,会借道更短的国省道。 差的这 3–5% 就是这个区别。个别偏长的(如杭州—宁波 +1.3%)反而是路网更贴近实际营运里程。

三处修过的偏差

01

有些点对到了不通的路上

早期有 62 个城市和区县,中心点被对到了地图上一条孤立的小路——杭州只能算出到 2 个地方, 常州一个都算不出来。现在只认主路网(占全部道路的 96%),对不上的往外重新找。

但不能一刀切:像岱山这种真岛屿,硬接到大陆上等于凭空造一座桥。所以只往外找 20 公里, 海南与台湾因此保持原样、退回估算。

02

香港到深圳算出 196 公里

深圳与香港之间的陆路口岸,在公开地图上没有连成可通行的道路,最短路径只能绕港珠澳大桥—— 实际 30 公里,算出 196 公里。同一类问题还有横断山区:德钦到得荣直线 44 公里, 路网给出 854 公里(跨江的公路缺一段)。

现在有一道安全阀:里程超过「直线 × 3 + 50 公里」就判定不可信,退回估算。 修完香港→深圳 196 → 32 公里。这种兜底不精确,但比一个错得离谱的精确数字诚实。

03

往返两个方向差几公里

单行道和单向匝道会让 A→B 与 B→A 差几公里。为了不让运费被低估, 两个方向里取较大的那个。实测这个差的中位数只有 2.4 公里。

还保留的人工校正

有 7 条跨海线路不走路网,用人工核定的里程:渤海海峡、琼州海峡、舟山群岛与杭州湾。 路网里这些轮渡是通的,但货车受班次、车型与滚装船限制,实际多数绕行或单独走船。 只按地图算出来的距离,不符合货车的实际跑法。

水路里程单独算:公路绕 1400 公里不代表海运也绕,海上的航距只有 165 公里。 这几个值固定不调,因为它们是可以被单独引用、被逐条核对的里程。

相关页面

询价
查物流线路 获取报价