Skip to content

铁路路由说明 ​

发布日期:2026 年 08 月 18 日
更新日期:2026 年 08 月 18 日

已知问题 ​

  • 部分站点与铁轨关系错误(可能无法连通 未逐一排查),部分站点与设施关联错误。
  • 部分区间交错复杂难以处理。如 [上海-苏州] 区间,京沪线与沪宁城际线存在诸多交叉,在没有排除/优选时会两条线路交错出现。
  • 部分区间铁路无明确上下行区分。如 [上海] 京沪线,引擎在默认情况下选择最短路线,便选择了右侧的正线。
  • 线路信息存在优化空间。如陇海线、丹昆特大桥等长途线路存在明显断路。
  • 线路与桥隧信息存在扩展空间。目前仅有名称与里程,后续可以增加更详细的信息。
  • 目前查询统一未限制铁路速度(因为部分铁路缺失数据),所以高速线与普速线可以互相跨线行驶。
  • 虽然底层支持货运线查询,但目前并未开放。

限制性说明 ​

考虑到铁路爱好者可能需要更自由地查经由信息。
所以才开放了查询工具,但做了一些权限的限制。
一来是开发还是蛮累的,不希望劳动成果没有回报。
二来是占用与消耗其实也不低的,特别是超长途路由的时候。
三来是怕有人通过技术手段逆向接口进行盗用滥用甚至包装后二次分发。
所以考虑后,我们才做上限流、限权的措施,还请大家理解。
未来若资金允许,可能会单独上线开放平台,专门提供类似的查询功能。

关于 ​

问题背景 ​

铁路路由的核心难题:区分不同线路——正线上下行、联络线、道岔、侧线等,都要如何处理。

传统路由引擎无法正确处理这些,导致路由结果不区分上下行,没有精细化信息。
除了需要区分上下行以外,经由信息也是我们很需要的。
传统解决方案,一般使用人工编写的里程表,维护困难、标准不一、精度差,遗漏缺失以及错误都是常态,有些比较细节的桥隧信息/线路所可能被忽略。 更重要的是,里程表难以与铁路真实位置关联起来。

而若使用传统方案,比如使用 GIS 数据库引擎,亦或是基于 OSM 数据的计算匹配,都存在这些问题:数据量大、难以维护、性能烂、效果差。

开发历程 ​

❌️ OSM 数据计算匹配 ​

从 OSM 数据中筛选出的铁路数据量仍然很大,遂放弃。
性能被数据加载环节给限制住了,完全没有优化空间,容易 OOM。

❌️ GIS 数据库引擎 ​

从网上搜集了一些清洗过后的铁路数据。
配合 GIS 数据库编写了一套查找逻辑。
虽然最终可用性不赖,但没有区分上下行、联络线识别效果差,且数据库占用大,不利于维护迁移。
最终还是作为了云端轨迹的回退方案。

❤️ 最新引擎(Railway Routing Engine For Travel Ticket Folder) ​

本来这套引擎(RREFTTF)还在规划中的,甚至只是个构想,而没有具体思路。

但最近刷到好几个铁路相关的 APP,做得还挺不错,用户量也大,基本都是铁路/火车爱好者。
反思了一下,感觉“旅行票夹”的核心设计可能不足以吸引爱好者们。
近一年断断续续地开发了一些小的功能,感觉除了仿真票据和真实轨迹外,没有特别好的亮点了。
毕竟我们的定位不仅限于铁路(火车),在火车相关记录/统计方面并不算出众。
但感觉爱好者们是最好的面向群体了。

痛定思痛,决心开发一些面向爱好者们的功能,比如经由信息。
但我们并不想搜集网络公开的经由信息,一是标准混乱,二是不够精确,三是没有亮点。
于是完善了一下引擎的设计思路,也不管思路验证了,直接边写边修。
折腾了一两个月(一直在掉头发),终于是把这个引擎给完善好了。

结果说明 ​

引擎很优秀,哪怕 [上海-拉萨] 这种超长途也能路由到结果。
经由信息全部输出,精确到米级别(理论上可以精确小数点,但没必要)。
不过很明显:越长的路途,路由解集越大。
所以在没有途径站点修正、路径优选/排除、云端轨迹修正的情况下,一些小细节还是与真实途径不太一样的。
以及原始数据集其实不够干净,所以桥隧与线路信息可能与真实情况存在出入(主要是长度、名称等)。
另外部分铁轨的标注信息不全,虽然尝试进行修复,但仍然会有遗漏。
因此会出现一些靠右行、错误折返、错误进入侧线、错误关联途径站的情况。
这种就只能通过用户反馈后的 PATCH 去实现了。

影响变化 ​

为了确保每张票据都能有经由信息,于是将本地引擎作为优选解,辅以云端轨迹修正。
但长途路由实际上耗费同步时间,遂将同步计算轨迹改为异步计算。
体验上会好很多。

核心指标: ​
  • 短途路由(< 300km):13-25ms
  • 长途路由(> 1000km):60-130ms
  • 超长途路由(> 4000km 上海→拉萨):~1000ms
验证测试: ​
sh
=== 铁路路由多维度测试 ===
时间: 2026-08-22 18:26:43

✅ 上海虹桥 → 苏州北: 74567m (14ms) [参考: ~73km]
  线路: 京沪高铁 74567m
  经由: 上海虹桥 → 🌉蕴藻浜特大桥(23488m) → 🌉丹昆特大橋(47815m) → 昆山南 → 苏州北

✅ 苏州北 → 南京南: 209982m (15.6ms) [参考: ~210km]
  线路: 京沪高铁 206139m → 沪蓉线 3843m
  经由: 苏州北 → 🌉丹昆特大橋(115404m) → 无锡东 → 常州北 → 丹阳北 → 镇江南 → 南京南

✅ 南京南 → 德州东: 710720m (50.2ms) [参考: ~660km]
  线路: 京沪高铁 708914m → 京沪高铁 1789m
  经由: 南京南 → 🌉大胜关长江大桥(10550m) → 滁州 → 定远 → 蚌埠南 → 宿州东 → 徐州东 → 枣庄 → 滕州东 → 曲阜东 → 泰安 → 济南西 → 德州东

✅ 德州东 → 沧州西: 103881m (7.9ms) [参考: ~103km]
  线路: 京沪高铁 103881m
  经由: 德州东 → 沧州西

✅ 沧州西 → 北京南: 208902m (15.1ms) [参考: ~209km]
  线路: 京沪高铁 208902m
  经由: 沧州西 → 🌉天津特大桥(113794m) → 天津南 → 廊坊 → 北京南

✅ 杭州东 → 南京南: 254089m (36.9ms) [参考: ~252km]
  线路: 宁杭高速线 252768m → 沪蓉线 1311m
  经由: 杭州东 → 德清 → 湖州 → 长兴 → 宜兴 → 溧阳 → 瓦屋山 → 溧水 → 🚇长乐明洞(5448m) → 句容西 → 江宁 → 南京南

✅ 义乌 → 杭州东: 111078m (15.8ms) [参考: ~110km]
  线路: 沪昆高速线 111078m
  经由: 义乌 → 🚇金都隧道(7979m) → 诸暨 → 🚇犬眠山1号隧道(6938m) → 🚇邵家塔隧道(6807m) → 🚇普安寺隧道(9108m) → 杭州南 → 杭州东

✅ 温州南 → 杭州东: 329038m (27.2ms) [参考: ~327km]
  线路: 杭深铁路 17080m → 杭温高速线 196972m → 义乌联络线 3823m → 沪昆高速线 111084m
  经由: 温州南 → 🌉杭深线(9910m) → 楠溪江 → 仙居 → 磐安 → 横店 → 义乌 → 义乌 → 🚇金都隧道(7979m) → 诸暨 → 🚇犬眠山1号隧道(6938m) → 🚇邵家塔隧道(6807m) → 🚇普安寺隧道(9108m) → 杭州南 → 杭州东

✅ 温州南 → 杭州西: 339203m (32.1ms) [参考: 未知]
  线路: 杭深铁路 17080m → 杭温高速线 261455m → 桐庐联络线 1063m → 合杭高速线 59575m
  经由: 温州南 → 🌉杭深线(9910m) → 楠溪江 → 仙居 → 磐安 → 横店 → 义乌 → 浦江 → 桐庐东 → 🚇冯岗山隧道(5452m) → 🚇姚坞隧道(10601m) → 富阳西 → 🚇安山隧道(6366m) → 杭州西

✅ 上海 → 拉萨: 4068442m (1015.3ms) [参考: 未知]
  线路: 京沪线 1114m → 沪宁城际线 292306m → 沪宁城际南京联络线 3023m → 京沪线 23669m → 永亭线 21415m → 沪蓉线 192324m → 六安联络线 7249m → 宁西线 141565m → 宁西线 707463m → 西安北环线 42464m → 咸铜线 9952m → 陇海线 7371m → 咸阳西联络线 3152m → 徐兰高速线 533145m → 兰新客专线 187372m → 兰青线 13703m → 青藏线 9311m → 双湟线 2613m → 青藏线 730202m → 格南联络线 5296m → 青藏线 1130508m
  经由: 上海 → 上海西 → 南翔北 → 安亭北 → 花桥 → 昆山南 → 阳澄湖 → 苏州园区 → 苏州 → 苏州新区 → 无锡新区 → 无锡 → 惠山 → 常州 → 丹阳 → 丹徒 → 镇江 → 宝华山 → 仙林 → 南京 → 林场 → 🌉永全线(6196m) → 全椒 → 黄庵 → 巢北 → 肥东 → 合肥南 → 长安集 → 南分路 → 姚李庙 → 叶集 → 固始 → 商城 → 传流店 → 潢川 → 罗山 → 信阳北 → 江湾村 → 信阳西 → 小林 → 月河店 → 桐柏 → 淮源 → 安棚 → 唐河 → 白秋 → 溧河 → 镇平 → 曲屯 → 内乡 → 丹水 → 西峡 → 丁河 → 西坪 → 商南 → 清油河 → 铁峪铺 → 丹凤 → 商镇 → 商洛 → 砚川 → 灞源 → 蔡家河 → 桥南镇 → 渭南西 → 零口 → 新丰镇 → 新丰镇 → 行者 → 西安国际港 → 萧家村 → 长陵 → 咸阳西 → 杨陵南 → 岐山 → 宝鸡南 → 东岔 → 🚇小墁坪隧道(8202m) → 🚇麦积山隧道(13908m) → 天水南 → 县家路 → 🚇杨家庄隧道(8101m) → 秦安 → 通渭 → 🚇王家岔隧道(5146m) → 下小岔 → 🚇雷家门隧道(5710m) → 🚇石羊岭隧道(6147m) → 定西北 → 🚇吴家岔隧道(10426m) → 榆中 → 陈家湾西 → 民和南 → 海东 → 海东西 → 西宁 → 西宁 → 小桥 → 西宁西 → 双寨 → 察汗诺 → 乌兰 → 柯柯 → 陶力 → 德令哈 → 饮马峡 → 饮马峡西 → 格尔木东 → 格尔木南 → 南山口 → 甘隆 → 昆仑桥 → 纳赤台 → 小南川 → 玉珠峰 → 不冻泉 → 清水桥 → 可可西里 → 五道梁 → 曲吾 → 秀水河 → 风火山 → 乌丽 → 沱沱河 → 开心岭 → 通天河 → 塘岗 → 雁石坪 → 布玛德 → 布强格 → 唐古拉 → 唐古拉南 → 扎加藏布 → 雪查玛 → 托居 → 安多 → 安多南 → 措那湖 → 联通河 → 底吾玛 → 那曲 → 罗玛 → 妥如 → 桑雄 → 古露 → 桑列 → 乌玛塘 → 龙仁 → 宁中 → 达琼果 → 羊八林 → 昂嘎 → 拉萨西 → 拉萨

=== 统计 ===
通过: 10/10
冷启动: 169.6ms (内存: 27.1 MB)
总路由耗时: 1230.2ms (预热后)
峰值内存: 68.1 MB