莫高飞天 发表于 2022-9-19 08:50:04

中国铁路在线地图(系统)

中国铁路在线地图包括了高速铁路、快速铁路、普通旅客铁路及货运铁路信息,支持车站、车次及线路名称的查询检索。该系统包含中文、英文、日文三个版本。

中文版系统地址:http://cnrail.geogv.org/zhcn/zhcn

以下是开发者 Kejing Peng 关于中国铁路在线地图项目的说明:
http://blog.geogv.org/wp-content/uploads/2017/01/intro-cn.png
身为一个“铁路运输爱好者”,虽然常年工作在外,但也时刻关心祖国铁路的迅猛发展。近十年来,中国铁路系统经历了令世人震惊的快速发展。根据资料显示,2015年中国大陆铁路运营里程已超过14万公里,快速铁路与高速铁路里程突破1.6万公里。在2016年,建设的脚步也没有放缓,2017年将会有更多的线路建成开通。
研究生毕业之后一直有制作一个关于中国铁路的在线地图的计划,感觉这是一件颇有意义的事情,而且能顺便实践一些新的Web技术。当时这样的在线地图并不多(例如这个,已不太正常),而且通常只有中文版。可惜3年前,我能拿到的地理数据很少,不足以完成这个任务。3年以后,当我偶然打开OpenStreetMap(以下简称OSM)的时候,发现中国铁路的数据已经基本上补全,而且网上也有越来越多的相关数据——终于可以动手实现这个系统了。
经过了大概半年的工作,中国铁路在线地图的第一个版本完成了。
系统介绍主要的功能就是:显示铁路、车站的信息,并以地图的方式呈现。并配上时刻表数据供参考。
本系统主要注重于运营客运的线路。货运铁路只显示了相当一部分,相当一部分煤运、货运以及港口铁路没有显示。以后有机会的话可能会逐渐补充。
浏览器
该系统在Microsoft Edge, IE, Firefox和Chrome下面通过测试。Safari基本上没问题,但有部分地方显示不准确。如果发现该网站不能正常显示,可以尝试使用以上浏览器,此外建议把网页大小设置为100%。
网页的布局和脚本是根据PC的浏览器设计的,手机的浏览器网页工作估计不正常。
地理数据
中国国界与省界数据来源于国家基础地理信息中心。
底图数据(大陆边界、水体以及高速公路等)均来自OSM。由于制作匆忙较短,只导入了中国大陆区域和临近区域的底图数据。此外,OSM上所有数据均有热心的网友绘制,难免有疏漏。
铁路车站及线路数据主要来自OSM以及Google地图卫星相片。再次感谢OSM地图的贡献者。所有地理数据都使用中华人民共和国的GCJ02坐标系。此外,如果你发现了本地图使用了敏感或不宜公布的信息,请联系我,我在核实后会在第一时间删除。
在此特别感谢网友@贵广十标段提供的宝贵数据。我发现OSM缺失不少新建线路的地理数据,而且部分数据质量非常低劣。当我向@贵广十标段提出能不能借用部分数据时,他非常爽快地答应了。此外,部分车站名称、铁路局管辖范围、线路拓扑关系等资料参考了@贵广十标段制作的铁路地图。这套制作详尽而精美的地图可以在他的微博上找到下载链接。
顺带感谢GeoITwinkle同学帮忙处理数据。以及室友Edwin同学帮忙在Safari上测试网页兼容性并解决了一些跟CSS flex相关的bug。
资料数据
铁路线路数据大部分来源自维基百科。但维基百科的数据缺失也很多,而且也不一定准确(尤其是很多铁路的运行速度)。在没有得到更加准确的数据源之前,我只能暂时借用了。
国内列车时刻表数据从网上收集,仅供参考。本网站并非商业网站,时刻表数据仅作为地图的补充,并不反映铁路实时运行情况。之后的时刻表更新频率将会很慢。如需获取准确的时刻表,请浏览中国铁路总公司铁路客户服务中心的官方网站,以及一些专业的时刻表网站(如携程、盛名时刻表等等)。
部分国际列车的时刻表来自维基百科,以及一些其他网站,不少资料已过时。
网站技术
这个项目差不多完全基于开源软件搭建的,除了服务器是Windows Server,因为手头上只有Windows的VPS,而且很少用Linux。在线地图客户端还是使用了我最熟手的TypeScript编程语言,并应用了Angular框架(还是老版本,对2.0还在观望中)。UI就直接用了bootstrap的样式,因为看起来比较现代化。地图框架使用了开源的Openlayers,但用的是旧版本2.0而不是新的3.0(因为3.0好像某些情况下渲染速度很慢)。以前服务器后台我一般用ASP.NET,但这次第一次尝试使用NodeJS作为后台。
数据库还是使用经典的GIS组合:PostgreSQL+PostGIS。所有地图底图均有GeoServer渲染。或许以后应该尝试一下noSQL的数据库来存储非地理的数据?
一些心得地图制作
地图上主要有两种标签:车站和地名。由于车站数量太多,所以标签很容易冲突(尤其是英文版,站名翻译之后特别长)。GeoServer默认的标签渲染虽然号称“自动解决冲突”,但效果非常糟糕。因此这部分工作是手动调整的。我首先制定了复杂的标签显示规则(例如显示在左、右、左上、右下之类的),然后再根据车站的位置慢慢调整。不过肯定会有疏漏的地方,所以还是会有因为冲突而不能显示的车站名。最麻烦的地方就是一些东西走向的铁路,如果地图仅有中文版的话,也许可以采用把车站名字竖排在线路上下两侧解决。但这种方法对英文版无效,所以没有这么做。另一个可行的方法是把字体稍微倾斜一个角度,但这个有点麻烦。而且如果控制不好的话,地图可能会显得更加杂乱,因此目前也没有这么做。
之前做这种WebGIS,通常都是把自己的数据叠加到外部的底图上,以前用得最多的应该是ESRI的底图。但这些底图有可能会拖慢地图显示速度,而且样式不一定是自己想要的,更别说某些地方不太和谐(例如国界)。因此这次决定自己制作底图,自己从OSM上面下载数据,然后再设计一套显示样式,能够淡化无关信息,并突出铁路地图的主题。地图样式的设计参考了Google Map,以及CARTO公司的basemap。 这个过程学习到不少东西,还了解了一个叫做mapnik可以生成tile map的工具。虽然最后用的还是GeoServer,但以后有机会可能会尝试使用mapnik来制作tile map。
为了处理地理数据,并支持正版软件,还花了100美元订阅了个ArcGIS的个人版(只有一年)。不过ArcGIS现在感觉真是暮气沉沉的样子。我的电脑性能也不算糟糕(i7-3770处理器,24GB内存,系统盘是SSD),但ArcMap跑得慢吞吞(最大问题估计是label rendering),还经常出奇怪的问题。开源软件QGIS现在已经成熟很多了,不仅能轻松处理OpenStreetmap的数据,渲染速度更是完爆ArcGIS。因此这个项目许多工作都是在QGIS下面完成的。
为了导入OSM的PBF数据到PostgreSQL数据库,还专门装了个Ubuntu的虚拟机。
老家在广铁地盘。本来还想把广铁集团的服务宗旨作为背景图放到某个地方,但后来想想还是算了 🙂
数据处理
车站的等级是一个麻烦的问题。如果每个车站都用同样的样式显示,那么就显得没有主次。虽然我国铁路部门对大部分车站都分了等级,然而这些等级不不能反映某个车站的实际客运情况,因为有大量的货运特等站、编组特等站之类的非客运站存在。所以地图中的车站分等没法做得很准确,只能很概略地分成主要客运站,大客运站,中客运站和小客运站。
根据我原来的计划,我的地图只有客运的铁路。但后来想想,还是把一些主要的货运铁路加进来比较好,这样显得更加充实,而且不少货运线路可能以后会开行客运列车。所以地图最后还是加上了主要的货运铁路(尤其是那些新建的)。
站名翻译是另一个问题。我国火车站命名一大特点就是使用东南西北来区分城市里面不同的车站。按照铁总的规范,所有名字都应该按照拼音翻译成Dong, Nan, Xi, Bei。但在我的系统里面还是翻译为East, South, West, North。之所以这么做,原因是因为第一,英语主要是服务外国游客,而不是本地人。按照汉语拼音翻译没有意义。第二,全用汉语拼音的话,部分车站名字可能会非常长,而且外国游客难以看出一个城市各个车站之间的关系。第三,不少很大型的火车站,目前的站牌还是写成East, South, West, North。第四,用英语翻译的话,方便缩写。例如地图里面,所有的东南西北都被缩略成(E), (S), (W), (N),节省不少宝贵的位置。另一个问题就是不少地名有一些约定俗成的英文名字,例如呼和浩特(Hohhot),哈尔滨(Harbin)等等。对于这种城市的火车站,我的规则是:对于县级及以上的城市,如果火车站以城市的名字命名,例如:哈尔滨(Harbin),格尔木(Golmud),加格达奇(Jagdaqi),库伦(Hure),按照国际习惯的英文翻译;否则按照拼音翻译,例如二连(Erlian),西乌旗(Xiwuqi)。除此以外所有小站都按拼音翻译。最后的一类是地名加上另一个名词的站名,例如:苏州园区,古田会址,合肥北城等等。这部分名字非常令人纠结,因为有的车站的官方翻译的确是地名+英语意译,例如苏州园区是Suzhou Industrial Park,其他的则不详。所以这部分地名翻译比较混乱,音译意译都有,有机会我会修正。但有一点肯定的是,如果是机场的火车站,我一定会把机场翻译为Airport而不是Jichang。
当然,我国车票上面站名下面写的是拼音,所以我的系统里面也同时显示了拼音以供参考。
说句题外话,我是很反感火车站滥用东南西北来命名的,尤其是很多县级行政区撤县改区之后,火车站迫不及待就改名为地级市的东南西北站。很多城市的火车站东南西北位置并不真的是按东南西北分布,而且不少站离名称中的城市距离非常远,很容易造成误导,例如武夷山东站都已经在南平市建阳区境内了,更别说这车站同时位于武夷山南站和武夷山北站的南面。此外不少城市的东南西北车站名称有时还要在新站建成或车站调整之后后进行挪移(例如茂名,茂名东,电白分别改名成茂名西,茂名,茂名东)。
以后的新功能
还在考虑中,可以改进的地方还是有很多的。例如:

[*]显示某个车站的邻近车站,或者服务于同一个城市的其他车站。
[*]给出起点和终点,求出可行的线路
[*]显示当前铁路的图形(这个有点难,不可能把一大堆点全部传到客户端)
[*]仅仅有文字比较单调,可能计划为每个车站增加一个背景图片
[*]日式时刻表的显示(就是给定运行方向,按出发时间排列的时刻表,比较适合于城际和高铁)
[*]显示客运路线的里程数等等。
此外,以后可能会有数据的开放计划。我会把部分数据放到GitHub上面共享。

zidon 发表于 2022-9-19 10:14:23

这个分色的中国铁路在线地图看着是比 OpenRailwayMap 中的中国铁路线路图要清楚很多。
页: [1]
查看完整版本: 中国铁路在线地图(系统)