Python实现OSM地图数据解析——OSM2Rail
目录
- 1. 简介
- 2. 功能特色
- 2.1 自动下载OpenStreetMap地图数据包
- 2.2 提供更精确的铁路网络数据解析
- 2.3 扩展GMNS标准
- 3. 快速上手
- 4. 效果展示
- 5. 相关阅读
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
Python实现OSM地图数据解析——OSM2Rail相关推荐
- Python实现OSM地图数据解析——OSM2GMNS
转载 OSM2GMNS相关说明文档: 详细用户文档:https://osm2gmns.readthedocs.io: Github链接:https://github.com/jiawei92/OSM2 ...
- Python实现OSM地图数据解析——Pydriosm
目录 1. Pydriosm简介 2. 安装 3. 使用方法 3.1 下载数据 3.2 解析文件 3.3 不同geometry 类型及其数据结构 4. 总结 参考 1. Pydriosm简介 Pydr ...
- osm地图数据 mysql_[小O地图-数据] 下载世界范围的OSM地图数据
[概述] 小O地图是互联网专业地图数据软件,致力为广大科研人员提供专业地图数据,用于科研及学习. OSM是OpenStreet Map的缩写,OSM是全球最大的互联网在线地图网站,提供世界范围的地图数 ...
- [小O地图-数据] 下载世界范围的OSM地图数据
[概述] 小O地图是互联网专业地图数据软件,致力为广大科研人员提供专业地图数据,用于科研及学习. OSM是OpenStreet Map的缩写,OSM是全球最大的互联网在线地图网站,提供世界范围的地图数 ...
- 集中式自动驾驶控制域中的高精地图数据解析算法
作者 | Aimme 出品 | 焉知 下一代自动驾驶架构设计中已经倾向于以软件定义汽车的方式集合,主要涉及中央集中处理单元的方式会存在较大的改变.这一改变主要体现在外围传感单元将不再有单独的分布式处理 ...
- OpenDrive格式地图数据解析
OpenDrive地图解析代码可以参考,https://github.com/liuyf5231/opendriveparser OpenDrive地图文件格式为xml,详细的介绍可以参考 http: ...
- python爬取地图数据_高德3地图之python爬取POI数据及其边界经纬度(根据关键字在城市范围内搜索)...
目前高德的边界没法批量爬取,不过可以采用百度地图的接口来替代,目前用着还可以,参见这里: 为了方便大家,不用再为安装环境,以及运行报错等问题困扰,目前已经将POI数据爬取做成一个在线公开的数工具,地址 ...
- Python网络爬虫之数据解析篇
对于爬虫中的数据解析,简单理解就是在通用爬虫获取到的响应数据中,进一步提取出我们需要的某些特定数据,例如一段文字,一张图片. 聚焦爬虫:爬取页面中指定的页面内容. --编码流程 1.指定url 2.发 ...
- python 接入百度地图数据包下载_Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库...
首先,我这里有一份相关城市以及该城市的公园数量的txt文件: 分析-02.png 其次,利用百度地图API提供的接口爬取城市公园的相关信息. 所利用的API接口有两个: 1.http://api.ma ...
最新文章
- python必背内容-【经验分享】学Python必背的初级单词
- LVS集群-DR负载均衡集群
- 如何配置php的ip地址吗,如何手动配置IP地址及防火墙设置
- JZOJ 3129. 【WinterCamp 2013】数三角形
- SnapGene mac 5.3.1 中文分子生物学可视化工具及教程
- arm汇编指令:ldr和adr的区别
- android launcher主要功能_[Android] 自动收取蚂蚁森林能量
- zabbix icmp ping 监控主机_Zabbix监控 MySQL 性能
- android通过php判断用户是否注册,android - 判断Token是否有效
- rog live service是什么_双11手机怎么买?ROG游戏手机3“独一份”体验,值得剁手...
- 每个人都知道MVC…
- Dapper基础知识三
- 再介绍一篇Contrastive Self-supervised Learning综述论文
- c语言不定参数个数,C语言中不定参数的实现
- [2018.10.20 T2] 面包
- 查询聊天好友IP地址(自用)
- PASCAL VOC2012数据集内容解读
- 跳棋编程c语言代码,跳棋游戏C语言程序设计(数据结构课程设计).doc
- **matlab subs函数**
- react插件,树状图(可自由定义子节点结构,大小,样式)