Python实现OSM地图数据解析——OSM2Rail

article/2025/7/22 2:12:02

目录

  • 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

字段备注
nameGMNS
node_idGMNS
x_coordGMNS
y_coordGMNS
geometryGMNS
railwayExtended
level_crossingExtended
accessExtended
descriptionExtended

link.csv

字段备注
nameGMNS
link_idGMNS
osm_way_idGMNS
from_node_idGMNS
to_node_idGMNS
link_type_nameGMNS
lengthGMNS
geometryGMNS
railwayExtended
electrifiedExtended
frequencyExtended
highspeedExtended
max_speedExtended
maxspeed_designedExtended
passenger_linesExtended
railway_ctcsExtended
railway_traffic_modeExtended
start_dateExtended
usageExtended
voltageExtended
gaugeExtended
serviceExtended

poi.csv

字段备注
nameGMNS
poi_idGMNS
osm_way_idGMNS
geometryGMNS
railwayGMNS

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


http://chatgpt.dhexx.cn/article/YUXLF4Zb.shtml

相关文章

下载OSM地图数据

OSM数据有几种下载方式:1)直接通过wget下载; 2)通过官网直接导出指定区域; 3)通过QGIS下载指定区域 1.通过wget下载数据 进入http://download.geofabrik.de/, 可以按照自己的需求下载不同国家不…

QGIS获取OSM地图矢量数据

目录 一、QGIS加载OSM底图图层 二、quickosm插件导入openstreetmap数据 三、数据导出 四、Overpass query查询用法 五、写在最后 一、QGIS加载OSM底图图层 1.安装QuickMapServices插件,在网络菜单下可以加载各类底图 2.插件安装后,通过插件打开OS…

OSM地图本地发布(一)-----概述

目录 一、前言 二、开源GIS介绍 1.前端GIS框架 2.后端技术 3.空间数据库 4.地图服务器 4.GIS软件 三、技术选型 四、文章目录 1.OSM本地发布(一)-----概述 2.OSM本地发布(二)-----数据准备 3.OSM本地发布(三)-----自定义图层提取 4.OSM本地发布(四)-----Geoserver…

中国省份/城市OSM地图数据

下载访问地址 网站截图

数据分享|2023年OSM道路数据(全国,分省,分市)

道路数据是我们在各项研究中经常使用的数据!道路数据虽然很常用,但是却基本没有能下载最近年份道路数据的网站,所以很多人不知道如何获到道路数据。 本次我们为大家推荐的下载道路数据的网站是Open Street Map!我们先来了解下Open Street Map,其简称为OSM,是一个开源的地…

基于 OSM 构建全球瓦片地图(一):概述

一、什么是OSM 开放街道地图(英语:OpenStreetMap,缩写为OSM),其概念启发自维基百科网站,是一个建构自由内容之网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。 从2007年…

Python实现OSM地图数据解析——OSM2GMNS

目录 1. 开源地图OSM2. 数据解析方法对比3. OSM2GMNS3.1 关于GMNS数据格式3.2 安装方法3.3 使用方法3.3.1 地图数据下载3.3.2 数据解析 3.4 输出文件 4. 可视化5. 总结参考 1. 开源地图OSM OpenStreetMap(www.openstreetmap.org)是一款知名的开源地图数…

利用微信网页录音接口实现语音搜索

微信网页接口有3个录音相关接口 开始录音接口 wx.startRecord();停止录音接口 wx.stopRecord({ success: function (res) { var localId res.localId; } });监听录音自动停止接口 wx.onVoiceRecordEnd({ // 录音时间超过一分钟没有停止的时候会执行 complete 回调 complete…

Unity WebGL基于js通信实现网页录音

Unity WebGL基于js通信实现网页录音 由于Unity发布WebGL后无法使用Unity中的Microphone,所以无法进行录音,只能借助与网页进行录音操作,因此基于Unity新版页面对接方式jslib实现页面录音。可以将录音数据回传至unity,并在unity中进行播放。理…

php录音功能,h5做出网页录音功能

这次给大家带来h5做出网页录音功能,h5做出网页录音功能的注意事项有哪些,下面就是实战案例,一起来看一下。 得益于前辈的分享,做了一个h5录音的demo。效果图如下: 点击开始录音会先弹出确认框: 首次确认允许后,再次录音不需要再确认,但如果用户点击禁止,则无法录音: …

java 网页 录音_Java+FlashWavRecorder实现网页录音并上传【新】

【注意】 【说明】 1.在线录音并直接上传到服务器中 【使用】 1.运行 1.请下载本项目,并导入myeclipse中 2.跑起项目,访问http://localhost:8080/recorder-online-upload查看效果 2.定制 1.打开WEB-INF/view/index.html 2.只有两段html注释中的代码是需要…

java 网页 录音_Java+FlashWavRecorder实现网页录音并上传

【注意】 【前言】 肯定有需求要网页录音,并且要上传。这奇葩需求。 然后找到了FlashWavRecorder, 【原始版本号】 1.下载 在上面的地址下载zip解压之后,目录里面有个index.html。打开之后这效果: 2.录音权限 必须保证你的电脑有麦…

10.WebRTC实现网页录音功能

一、概述 通过WebRTC,实现在页面上进行录音,并将录音结果转换为.wav格式进行播放 二、录音实现 检测是否有麦克风权限 navigator.mediaDevices.enumerateDevices().then(function(devices) {// 检测视频输入let video devices.find((device) > {…

uniapp中使用网页录音并上传声音文件(发语音)——js-audio-recorder的使用【伸手党福利】

uniapp中上传音频只能在app或小程序当中实现,如何使用网页完成语音的录制和上传则成为了困扰前端童鞋的重点。 本文着重解决: js-audio-recorder报 error:浏览器不支持getUserMedia ! 的问题。 js-audio-recorder报 NotFoundError : Requested device no…

前端实现在浏览器网页中录音

一、整体实现的思想 页面中实现录音需要使用浏览器提供的MediaRecorder API,所以要实现页面录音就需要浏览器支持MediaStream Recording相关的功能,即浏览器能够获取浏览器的录音权限。 页面内容,需要一个记录录音开始和结束的按钮,以及一个用…

基于神经网络的自适应最优控制

《 N e u r a l n e t w o r k a p p r o a c h t o c o n t i n u o u s − t i m e d i r e c t a d a p t i v e o p t i m a l c o n t r o l f o r p a r t i a l l y u n k n o w n n o n l i n e a r s y s t e m s 》 D r a g u n a V r a b i e ∗ , F r a n k L e w …

堆排序(排升序为啥建大堆,排降序为啥建小堆)

简介: 之前对堆排序认识的不是很透彻,今天回过头来再把堆排序的知识整理整理!以及排升序为什么要建大堆,排降序要建小堆。 正文: 首先我们要知道:   ①堆的逻辑是一颗完全二叉树;   ②它使…

残差网络Residual Networks-残差网络的创建、训练、测试、调参

残差网络的创建、训练、测试、调参加粗样式 在Keras中实现残差网络模型的创建,并通过模型来实现对图片的分类。 残差网络的预备知识 网络越深越好? 随着网络层级的不断增加,模型精度不断得到提升,而当网络层级增加到一定的数目…

堆排序,为什么升序排列要建大堆,降序排列要建小堆

堆排序中用到了建立大小堆和向下调整的内容,对这些内容有些不了解的同学可以去补一补专门写堆的博客,方便更好的理解堆排序数据结构之堆(Heap),堆的相关操作,用堆模拟优先级队列。 如果把待排序序列分为未排…

操作系统——动态分配算法(首次适应算法,最佳适应算法,最坏适应算法及回收)

操作系统——动态分配 写的时间早了,有些许漏洞和不足,请大家不要介意 分配方式可分为四类:单一连续分配、固定分区分配、动态分区分配以及动态可重定位分区分配算法四种方式,其中动态分区分配算法就是此实验的实验对象。动态分区分配又称为…