0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于OSMnx的TransCAD路网模型快速构建

TransCAD和TransModeler交通软件 来源:TransCAD和TransModeler交通软件 2025-01-03 10:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

开源数据对交通模型贡献与日俱增。就道路网络建模而言,随着数据质量的提升,开源OpenStreetMap矢量数据已经具备较强的可用性。首先,OpenStreetMap矢量数据更新速度较快,且具备较为准确的几何线形信息,自带路名、路名和等级等信息,使其具备了较好的基本条件;其次,采用通用的WGS84坐标系,可以更方便的与其它开源数据源协同利用。不过,OpenStreetMap矢量数据文件是xml格式,直接用于建模也存在不同程度的障碍,尤其是网络拓扑存在普遍的问题。本文探讨基于Python + OSMnx软件包的OpenStreetMap矢量数据在TransCAD交通规划模型软件中的路网建模方法,发掘开源数据利用新路径。

1 OSMnx简介及路网数据提取方法

1.1 OSMnx简介及安装

OSMnx 是南加州大学的Geoff Boeing助理教授开发的一个 Python 软件包,可以用于从OpenStreetMap下载、拓扑处理、分析和可视化街道网络和其他地理要素。只需一行代码,就能下载步行、驾车或骑车网络并建立模型,然后对其进行分析和可视化。OSMnx还可以轻松处理城市设施/兴趣点、建筑占地面积、公交站点、高程数据、街道方向、速度/旅行时间和路线。本文着重介绍怎样基于OSMnx构造交通模型的道路网络,关于其它功能详见OSMnx官网。

OSMnx的安装方法之一是可以在Anaconda环境下运行以下命令:

conda create -n ox -c conda-forge --strict-channel-priority osmnx

Anaconda是一个功能强大的数据科学平台,可安装、管理Python相关包的软件,自带Python、Jupyter Notebook、Spyder等工具。其自带Python解释器,用户可以方便地进行Python编程。当然,也可以使用pip安装,不过Anaconda软件安装说明文档提示这不属于官方支持做法。

1.2 OSMnx在线路网下载和拓扑处理

OSMnx 提供5种方式下载在线路网,本文主要介绍多边形面域和矩形框两种,其他具体详见使用手册的函数参数说明。

序号 方式 函数
1 地址 graph_from_address()
2 矩形框 graph_from_bbox()
3 位置 graph_from_place()
4 坐标点 graph_from_point()
5 多边形 graph_from_polygon()

(1)多边形面域graph_from_polygon()

OSMnx可以获取OpenStreetMap自带的行政边界,用作选择范围的面域。当然,也可以通过外部读入面域图形的shp文件作为边界。以下以北京海淀区范围为例演示通过多边形面域构建图网络。

6aabce50-c84d-11ef-9310-92fbcf53809c.png

6af273e6-c84d-11ef-9310-92fbcf53809c.png

6b2a12f6-c84d-11ef-9310-92fbcf53809c.png

6b535c2e-c84d-11ef-9310-92fbcf53809c.png

注意运行以上操作需要有对国外网站的访问权限,生成的gpkg文件是GeoPackage的文件格式,可以用QGIS打开看到包含edges和nodes两个图层,分别对应线层和点层。将这两个图层分别导出为shp文件,即可作为TransCAD建模的路网输入文件。

6b6bceee-c84d-11ef-9310-92fbcf53809c.png

需要说明的是面域文件可以使用外部读入权威的shp文件替代,考虑到OpenStreetMap自带行政边界缺少权威性,建议使用自定义边界以避免产生不必要的争议。

6b8f135e-c84d-11ef-9310-92fbcf53809c.png

(2)矩形框graph_from_bbox()

矩形框操作和多边形面域类似,使用graph_from_bbox()函数,通过元组数据指定边界范围即可,使用海淀区的坐标范围所得小汽车网络见下图。

6bad1bf6-c84d-11ef-9310-92fbcf53809c.png

1.3 离线osm文件的获取、切割和OSMnx拓扑处理

OSMnx还提供基于osm文件的离线建模方式,不受网络下载的限制。但一般而言可直接获取的数据是一个包含全中国的范围的osm文件,数据量很大。因此在使用前需要对osm文件根据需要的范围进行切割。

(1)OSM文件下载

通过https://download.geofabrik.de/网站,可以下载全国的osm文件,点击Asia然后选择子区域中的China。原始文件大小约2G,解压缩后约22.6G。

6c0b4cf8-c84d-11ef-9310-92fbcf53809c.png

6c2f6fb6-c84d-11ef-9310-92fbcf53809c.png

(2)使用osmosis工具切割OSM文件

切割OSM文件需要用到osmosis工具。osmosis是一个基于Java的开源osm文件切割工具,当前最新版为0.49.2,下载链接:

https://github.com/openstreetmap/osmosis/releases/download/0.49.2/osmosis-0.49.2.zip

osmosis切割osm同样提供矩形框和面域两种形式。对于矩形框而言操作较为简单,以前文的北京市海淀区为例,其命令为:

osmosis--read-xml file=f:china-latest_20240518.osm --bounding-boxtop="40.173" left="116.059" bottom="39.871"right="116.398" clipIncompleteEntities=true--wx file=f:haidian.osm

通过上下左右的坐标来指定矩形范围,特别需要注意的是clipIncompleteEntities需要设置为true,否则OSMnx在读入文件构建图网络时会提示节点信息不完整出错。

osmosis同样提供面域切割的模式,面域文件后缀为“.poly”。根据shp文件生成“.poly”建议使用QGIS的插件osmploy_export。安装完成后,选择面域,点击菜单图标6c565ae0-c84d-11ef-9310-92fbcf53809c.png,指定字段作为面域名称即可生成“.poly”文件。注意面域需要包含字符型字段才可以作为面域“.poly”文件的面域标签。

6c6e2ab2-c84d-11ef-9310-92fbcf53809c.png

基于面域“.poly”文件的osm文件切割命令如下:

osmosis--read-xml file=f:china-latest_20240518.osm --bounding-polygonfile="f:Haidian.poly" clipIncompleteEntities=true --wxfile=f:Haidian_poly.osm

(3)离线osm文件拓扑处理

使用OSMnx对离线osm文件拓扑处理过程如下:

6c891f3e-c84d-11ef-9310-92fbcf53809c.png

从上图不难发现离线osm文件的要素远比直接在线地图建模的内容要丰富,主要是因为前文在线地图中只包含小汽车通行的网络,而在离线osm建模结果包含了铁路、地铁、小汽车、步行等所有网络信息。相对在线下载的osm文件,遗憾的是未能在离线osm文件找到通行权选择集参数。因此如采用离线osm文件得到的结果作为后续交通模型输入需要通过选择集做进一步筛选和清洗。

上图为多边形切割后的建模结果,网络冗余明显减少。因此,考虑后续处理的工作量,建议采用多边形切割代替矩形框。

2 基于OSMnx数据的TransCAD路网建模

2.1 gpkg数据导出

OSMnx生成的图网络保存gpkg,对应生成edges和nodes两个图层。gpkg文件可以直接用QGIS打开,分别将这两个文件导出保存为shp备用。为了防止shp文件中文字段的乱码,需要针对不同的TransCAD版本选择不同编码方式,下面的例子是选择UTF-8编码方式。顺便说一下,使用QGIS保存shp文件为不同编码方式,可以解决TransCAD早期版本对一些特定编码的shp文件显示为乱码的问题。

6cd8aa68-c84d-11ef-9310-92fbcf53809c.png

6cf602f2-c84d-11ef-9310-92fbcf53809c.png

2.2 shp文件导入TransCAD

TransCAD支持带有拓扑关系的点和线两个图层同时导入,也支持双向的道路双线要素格式转换为单线要素格式,并用AB/BA字段表示双向的不同属性,较为灵活。参见:TransCAD导入常用交通规划软件网络数据。

在TransCAD通过File菜单,Open找到edges.shp文件,并按下图设置(包括nodes.shp文件),待完成后即可生成TransCAD模型路网。

6d136360-c84d-11ef-9310-92fbcf53809c.png

6d2d93fc-c84d-11ef-9310-92fbcf53809c.png

6d3d8bf4-c84d-11ef-9310-92fbcf53809c.png

不难发现,导入后的网络link属性中路名、道路等级等属性比较完整,但车道数、自由流车速等指标存在缺失。这是由于OpenStreetMap地图数据本身的缺陷。要用于交通模型,还需要通过标准化属性赋值来弥补这一缺陷的方法。下面介绍标准化属性赋值方法。

2.3 道路属性配置

考虑OpenStreetMap数据车道和自由流车速缺失的问题。经对osm地图数据的梳理,发现车行道的linktype约有89种。结合道路等级和连接属性,进一步分成22类,分别对于每一类道路的车道数和自由流车速进行初始化。相关参数见下表。

NO linktype type lanes speed
1 motorway 1 3 120
2 trunk 2 4 70
3 primary 3 3 50
4 secondary 4 2 40
5 tertiary 5 1 30
6 residential 6 1 20
7 living_street 7 1 15
8 road 8 1 20
9 unclassified 8 1 20
10 busway 9 1 40
11 escape 10 1 10
12 motorway_link 11 2 60
13 trunk_link 12 2 40
14 primary_link 13 1 30
15 secondary_link 14 1 25
16 tertiary_link 15 1 20
17 ['motorway', 'motorway_link'] 21 1 30
18 ['motorway_link', 'motorway'] 21 1 30
19 ['primary', 'motorway'] 21 1 30
20 ['secondary', 'motorway'] 21 1 30
21 ['trunk', 'motorway'] 21 1 25
22 ['trunk_link', 'motorway'] 21 1 25
23 ['motorway_link', 'primary_link'] 22 1 25
24 ['motorway_link', 'tertiary'] 22 1 25
25 ['motorway_link', 'unclassified'] 22 1 25
26 ['primary', 'motorway_link'] 22 1 25
27 ['residential', 'motorway_link'] 22 1 25
28 ['secondary', 'motorway_link'] 22 1 25
29 ['secondary_link', 'motorway_link'] 22 1 25
30 ['tertiary_link', 'motorway_link', 'tertiary'] 22 1 25
31 ['tertiary_link', 'motorway_link'] 22 1 25
32 ['trunk', 'motorway_link'] 22 1 25
33 ['trunk_link', 'motorway_link'] 22 1 25
34 ['unclassified', 'motorway_link'] 22 1 25
35 ['primary', 'trunk', 'primary_link'] 23 1 20
36 ['primary', 'trunk'] 23 1 20
37 ['secondary', 'secondary_link', 'trunk'] 23 1 20
38 ['secondary', 'trunk', 'trunk_link', 'unclassified'] 23 1 20
39 ['secondary', 'trunk'] 23 1 20
40 ['secondary_link', 'trunk', 'secondary'] 23 1 20
41 ['secondary_link', 'trunk'] 23 1 20
42 ['trunk', 'primary_link'] 23 1 20
43 ['trunk', 'tertiary'] 23 1 20
44 ['trunk', 'trunk_link'] 23 1 20
45 ['primary', 'trunk_link'] 24 1 20
46 ['residential', 'trunk_link'] 24 1 20
47 ['secondary', 'trunk_link'] 24 1 20
48 ['secondary_link', 'trunk_link'] 24 1 20
49 ['trunk_link', 'primary_link'] 24 1 20
50 ['trunk_link', 'tertiary'] 24 1 20
51 ['trunk_link', 'unclassified'] 24 1 20
52 ['primary', 'primary_link'] 25 1 20
53 ['primary', 'tertiary'] 25 1 20
54 ['primary', 'tertiary_link'] 25 1 20
55 ['primary_link', 'tertiary'] 25 1 20
56 ['residential', 'primary'] 25 1 20
57 ['residential', 'primary_link'] 25 1 20
58 ['secondary', 'primary', 'tertiary'] 25 1 20
59 ['secondary', 'primary'] 25 1 20
60 ['secondary', 'primary_link'] 25 1 20
61 ['tertiary', 'primary_link'] 25 1 20
62 ['unclassified', 'primary_link'] 25 1 20
63 ['residential', 'secondary'] 26 1 15
64 ['secondary', 'living_street'] 26 1 15
65 ['secondary', 'secondary_link'] 26 1 15
66 ['secondary', 'tertiary'] 26 1 15
67 ['secondary', 'tertiary_link', 'tertiary'] 26 1 15
68 ['secondary', 'tertiary_link'] 26 1 15
69 ['secondary', 'unclassified'] 26 1 15
70 ['secondary_link', 'secondary', 'tertiary'] 26 1 15
71 ['secondary_link', 'secondary'] 26 1 15
72 ['secondary_link', 'tertiary'] 26 1 15
73 ['secondary_link', 'tertiary_link', 'tertiary'] 26 1 15
74 ['secondary_link', 'tertiary_link'] 26 1 15
75 ['secondary_link', 'unclassified'] 26 1 15
76 ['living_street', 'tertiary'] 27 1 15
77 ['living_street', 'unclassified'] 27 1 15
78 ['residential', 'living_street', 'unclassified'] 27 1 15
79 ['residential', 'living_street'] 27 1 15
80 ['residential', 'road'] 27 1 15
81 ['residential', 'tertiary'] 27 1 15
82 ['residential', 'tertiary_link'] 27 1 15
83 ['residential', 'unclassified', 'tertiary'] 27 1 15
84 ['residential', 'unclassified'] 27 1 15
85 ['road', 'residential'] 27 1 15
86 ['road', 'unclassified'] 27 1 15
87 ['tertiary_link', 'tertiary'] 27 1 15
88 ['tertiary_link', 'unclassified'] 27 1 15
89 ['unclassified', 'tertiary'] 27 1 15

建议在shp文件导入TransCAD之前完成数值初始化,这样双向的属性更容易一次性操作。

3结语

总体来说通过OpenStreetMap来构建交通模型网络虽然还存在一定缺陷,特别是道路等级、车道数和自由流车速的问题。但无疑这是一种高效的交通网络建模方法,再配合公交模型数据库自动创建工具,能够快速完成基础交通网络模型的开发,是一种值得推广的工作模式。当然,网络数据的可靠性对模型的精度也会有直接的影响,在条件允许的情形下,其他高质量的输入数据仍然是交通建模的首选(例如导航地图矢量数据)。

OSMnx不仅可以作为道路网络的建模工具,还有其他一些重要的功能,包括k最短路分析、距离计算等。这些功能具有广泛的应用场景。骑行、步行网络也能够直接支持开展城市骑行和步行网络的研究工作。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 交通网络
    +关注

    关注

    0

    文章

    10

    浏览量

    7161
  • 路网
    +关注

    关注

    0

    文章

    8

    浏览量

    6687

原文标题:基于OSMnx的TransCAD路网模型快速构建

文章出处:【微信号:TransCADTransModeler,微信公众号:TransCAD和TransModeler交通软件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    构建CNN网络模型并优化的一般化建议

    通过实践,本文总结了构建CNN网络模型并优化的一般化建议,这些建议将会在构建高准确率轻量级CNN神经网络模型方面提供帮助。 1)避免单层神经网络:我们清楚神经网络本身是需要不断抽象出
    发表于 10-28 08:02

    瑞芯微模型量化文件构建

    模型是一张图片输入时,量化文件如上图所示。但是我现在想量化deepprivacy人脸匿名模型,他的输入是四个输入。该模型训练时数据集只标注了人脸框和关键点,该模型的预处理是放到
    发表于 06-13 09:07

    望石智慧基于亚马逊云科技构建医药行业专属大模型 推动药物研发创新

    北京 ——2025 年 5 月 13 日 创新型生物医药科技企业望石智慧应用亚马逊云科技的底层基础设施、高性能计算和存储等技术与服务,构建多模态3D分子生成大模型,在降低运维负担与成本的同时,推动
    发表于 05-13 14:21 994次阅读

    KaihongOS操作系统FA模型与Stage模型介绍

    KaihongOS中提供了不同的开发方式和架构选择,Stage模型因其在分布式应用开发中的优势而被推荐使用。 说明:KaihongOS文档中心中应用开发(开发准备、快速入门、进阶提高模块中的示例代码均基于Stage模型。)
    发表于 04-24 07:27

    基于RV1126开发板实现多路网络摄像头取流方案

    在RV1126上实现多路网络摄像头取流方案
    的头像 发表于 04-21 14:39 49次阅读
    基于RV1126开发板实现多<b class='flag-5'>路网</b>络摄像头取流方案

    基于RV1126开发板实现多路网络摄像头取流方案

    在RV1126上实现多路网络摄像头取流方案
    的头像 发表于 04-11 15:57 928次阅读
    基于RV1126开发板实现多<b class='flag-5'>路网</b>络摄像头取流方案

    商汤科技日日新大模型SenseNova上线声网云市场

    日前,商汤科技日日新大模型SenseNova即将正式上线声网云市场,开发者和企业用户可通过声网的实时互动云服务进行调用,将商汤领先的模型能力集成到各类应用场景中,快速构建基于日日新大
    的头像 发表于 04-08 17:24 1317次阅读

    顶坚手持终端赋能铁路巡检,打造智慧铁路网

    手持终端以其强大的数据采集、实时通讯与智能化分析能力,正深刻变革着铁路巡检模式,为构建高效、安全、智能的智慧铁路网络奠定了坚实基础。通过精准捕捉设备状态,即时传输巡检信息,手持终端不仅加速了故障
    的头像 发表于 03-10 10:30 631次阅读
    顶坚手持终端赋能铁路巡检,打造智慧铁<b class='flag-5'>路网</b>络

    请问NanoEdge AI数据集该如何构建

    我想用NanoEdge来识别异常的声音,但我目前没有办法生成模型,我感觉可能是数据集的问题,请问我该怎么构建数据集?或者生成模型失败还会有哪些原因?
    发表于 03-10 08:20

    构建开源OpenVINO™工具套件后,模型优化器位于何处呢?

    构建开源OpenVINO™工具套件后,模型优化器位于何处?
    发表于 03-06 08:18

    【「基于大模型的RAG应用开发与优化」阅读体验】+第一章初体验

    《基于大模型的RAG应用开发与优化》试读报告 ——第一章:了解大模型与RAG 近年来,随着人工智能技术的快速发展,大模型与生成式AI技术逐渐成为成功引起了我的关注,尤其是最近给美股沉
    发表于 02-07 10:42

    【「基于大模型的RAG应用开发与优化」阅读体验】+大模型微调技术解读

    微调:通过在预训练模型中插入适配器模块来适应特定任务,既保留了原始模型的性能,又能快速适应新任务。Prefix-Tuning:通过在输入序列的前面添加特定前缀来微调模型,不需要对
    发表于 01-14 16:51

    小白学大模型构建LLM的关键步骤

    随着大规模语言模型(LLM)在性能、成本和应用前景上的快速发展,越来越多的团队开始探索如何自主训练LLM模型。然而,是否从零开始训练一个LLM,并非每个组织都适合。本文将根据不同的需求与资源,帮助
    的头像 发表于 01-09 12:12 1554次阅读
    小白学大<b class='flag-5'>模型</b>:<b class='flag-5'>构建</b>LLM的关键步骤

    【「大模型启示录」阅读体验】对大模型更深入的认知

    ,大模型的世界远比我想象的要复杂和深刻。 书中不仅详细介绍了大模型构建过程,还探讨了它们的核心能力和所需的基础设施。我特别喜欢的是,书中用通俗易懂的语言,把大模型的“不可能三角”,即
    发表于 12-20 15:46

    Simulink模型仿真与分析技巧

    1. 模型构建基础 1.1 理解系统需求 在开始构建模型之前,明确系统的需求和目标是至关重要的。这包括了解系统的动态特性、输入输出关系以及预期的性能指标。 1.2 选择合适的模块 Simulink
    的头像 发表于 12-12 09:23 3373次阅读