1. 简介
前期为大家介绍了由美国亚利桑那州立大学ASU Trans+AI Lab团队开发的开源python依赖库——OSM2GMNS,不仅为研究人员提供了快速获取多模交通网络数据的方法,而且引入了GMNS(General Modeling Network Specification)标准,使得数据存储与利用变得更加高效和便捷。通过OSM2GMNS可以快速获取任意区域的多模式交通网络数据(作为铁路爱好者这里我们只关注铁路网络数据):
先来看看北京南站铁路网络数据:
再来看看上海虹桥铁路网络数据:
细心的读者是不是发现了一点小问题?在北京南站铁路网络数据中混入了异常的node和link,同样在上海虹桥站铁路网络数据中不仅掺杂了异常的node和link,还包含了地铁的node和link。如果我只想要铁路数据该怎么办呢?在大量的node,link中逐一筛选么?现在告诉你:不用这么麻烦!
为了解决OSM2GMNS中存在的铁路数据解析不彻底的问题,北京交通大学的崔赞扬博士生和陈军华老师与美国亚利桑那州立大学的陆佳炜博士生、英国伯明翰大学的付谦博士,合作开发了开源python依赖库——OSM2Rail,不仅提供了更精确的铁路网络解析结果,而且实现了OpenStreetMap地图数据包自动下载,同时在GMNS标准的基础上扩展了铁路数据字段,将解析数据输出为符合GMNS-Rail标准的路网文件。
架起研究人员与铁路网络数据的桥梁!
2. 功能特色
OSM2Rail相比OSM2GMNS有什么区别?
2.1 自动下载OpenStreetMap地图数据包
引入了由付谦博士开发的OSM地图数据处理包Pydriosm的数据下载核心代码,同时增加了Overpass数据下载方法,实现任意范围内地图数据包下载。具体数据下载方法如下:
- 通过区域名称下载
只要你能在OSM网站搜索到的(https://www.openstreetmap.org/)区域,OSM2Rail都能帮你搞定;
- 通过坐标框下载
不知道区域名称没关系,只要经纬度范围就够了;
- 一次性下载多个文件
想一次下载多个文件?没问题!
2.2 提供更精确的铁路网络数据解析
充分挖掘OSM地图数据包中的铁路数据字段,细化铁路数据解析核心代码,剔除异常node、link、以及地铁线路干扰,保留单纯的铁路数据。
2.3 扩展GMNS标准
根据OSM地图数据包所提供的的铁路数据字段,对GMNS标准进行字段扩展,为铁路网络建模与优化提供更多有效信息,扩展后的GMNS-Rail标准如下:
node.csv
字段 | 备注 |
---|---|
name | GMNS |
node_id | GMNS |
x_coord | GMNS |
y_coord | GMNS |
geometry | GMNS |
railway | Extended |
level_crossing | Extended |
access | Extended |
description | Extended |
link.csv
字段 | 备注 |
---|---|
name | GMNS |
link_id | GMNS |
osm_way_id | GMNS |
from_node_id | GMNS |
to_node_id | GMNS |
link_type_name | GMNS |
length | GMNS |
geometry | GMNS |
railway | Extended |
electrified | Extended |
frequency | Extended |
highspeed | Extended |
max_speed | Extended |
maxspeed_designed | Extended |
passenger_lines | Extended |
railway_ctcs | Extended |
railway_traffic_mode | Extended |
start_date | Extended |
usage | Extended |
voltage | Extended |
gauge | Extended |
service | Extended |
poi.csv
字段 | 备注 |
---|---|
name | GMNS |
poi_id | GMNS |
osm_way_id | GMNS |
geometry | GMNS |
railway | GMNS |
3. 快速上手
【Step 1】安装OSM2Rail
打开电脑Command Prompt或Anaconda Prompt,输入如下命令行,通过pip安装。
pip install osm2rail
【Step 2】下载区域路网
新建py文件,输入以下代码,通过区域名称下载地图数据包。
import osm2rail as orl
subarea="北京南"
download_dir='osmfile'
osm_file=orl.download_osm_data_from_overpass(subarea_names=subarea,download_dir=download_dir,ret_download_path=True)
- 可自定义的选项:
(1)boxs:tuple,目标区域经纬度坐标范围(e.g. boxs=(minlat,maxlat,minlon,maxlon)),与subarea_name字段用其一即可。
(2)download_dir:str,文件保存路径,默认为当前路径下的 'osmfile’文件夹 。
(3)interval_sec:int,连续下载两个文件时时间间隔。
(4)random_header:bool,是否采用随机请求头文件。
(5)ret_download_path:bool,是否返回文件保存路径。
【Step 3】解析路网
net=orl.get_network_from_OSMFile(osm_filename=osm_file[0],POIs=True)
- 可自定义的选项:
(1)strict_mode:bool,是否严格解析坐标框内的铁路数据,默认为False。
(2)POIs:bool,是否提取POI(兴趣点Point of Interest)数据,默认为False。
(3)osm_filename也可直接指定路径和osm文件。
【Step 4】导出文件
orl.saveNetwork(net)
- 可自定义的选项:
output_folder:设置文件保存路径,默认为当前路径下的 ‘csvfile’ 文件夹。
【Step 5】可视化
可以输入以下命令进行网络可视化:
orl.showNetwork(net)
- 可自定义的选项:
savefig:图像保存参数,需指定文件名及分辨率,例如:
savefig={'filename':"network.png",'dpi':300}
输出的csv文件还可导入QGIS,NeXTA,plot4gmns等工具进行可视化,以便进行后续处理。
完整代码可通过GitHub,pypi主页,google colab获取:
https://github.com/PariseC/osm2rail
https://pypi.org/project/osm2rail/
https://colab.research.google.com/github/PariseC/osm2rail/blob/main/osm2rail.ipynb
4. 效果展示
北京南站:
满洲里口岸站:
京津冀铁路网:
粤港澳大湾区铁路网:
英国伯明翰站:
英国大伦敦地区铁路网:
德国法兰克福周边铁路网:
5. 相关阅读
如果需要包含道路、航空、慢行等多方式路网,可利用OSM2Rail下载的osm文件,配合OSM2GMNS使用,详见:
【神器】你想要的交通网络数据,三行代码搞定!
更多关于OSM2GMNS的详细信息,请参阅用户手册:
https://osm2gmns.readthedocs.io/en/latest/
更多关于Pydriosm的详细信息,请参阅用户手册:
https://pydriosm.readthedocs.io/en/latest/index.html
更多关于NeXTA的详细信息,请参阅用户手册:
https://github.com/asu-trans-ai-lab/NeXTA4GMNS
更多关于plot4gmns的详细信息,请参阅用户手册:
https://github.com/PariseC/plot4gmns