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

    文章

    9

    浏览量

    7041
  • 路网
    +关注

    关注

    0

    文章

    8

    浏览量

    6598

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

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

收藏 人收藏

    评论

    相关推荐

    如何使用Python构建LSTM神经网络模型

    构建一个LSTM(长短期记忆)神经网络模型是一个涉及多个步骤的过程。以下是使用Python和Keras库构建LSTM模型的指南。 1. 安装必要的库 首先,确保你已经安装了Python
    的头像 发表于 11-13 10:10 419次阅读

    为THS3001构建一个简单的SPICE模型

    电子发烧友网站提供《为THS3001构建一个简单的SPICE模型.pdf》资料免费下载
    发表于 10-29 10:11 0次下载
    为THS3001<b class='flag-5'>构建</b>一个简单的SPICE<b class='flag-5'>模型</b>

    快速部署Tensorflow和TFLITE模型在Jacinto7 Soc

    电子发烧友网站提供《快速部署Tensorflow和TFLITE模型在Jacinto7 Soc.pdf》资料免费下载
    发表于 09-27 11:41 0次下载
    <b class='flag-5'>快速</b>部署Tensorflow和TFLITE<b class='flag-5'>模型</b>在Jacinto7 Soc

    【飞凌嵌入式OK3576-C开发板体验】rkllm模型量化构建

    (model = modelpath) if ret != 0: print(\'Load model failed!\') exit(ret) 模型量化构建 # Build model ret
    发表于 08-27 22:50

    什么是大模型快速了解大模型基本概念

    “在人工智能的世界里,大模型就像超级大脑一样,能够处理和理解大量的信息。你可能听说过ChatGPT,它就是大模型的一个典型代表。那么,什么是大模型呢?让我们一起来探索这个神奇的领域。什么是大
    的头像 发表于 08-07 08:28 1539次阅读
    什么是大<b class='flag-5'>模型</b>?<b class='flag-5'>快速</b>了解大<b class='flag-5'>模型</b>基本概念

    如何构建多层神经网络

    构建多层神经网络(MLP, Multi-Layer Perceptron)模型是一个在机器学习和深度学习领域广泛使用的威廉希尔官方网站 ,尤其在处理分类和回归问题时。在本文中,我们将深入探讨如何从头开始构建一个多层神经网络
    的头像 发表于 07-19 17:19 903次阅读

    PyTorch神经网络模型构建过程

    PyTorch,作为一个广泛使用的开源深度学习库,提供了丰富的工具和模块,帮助开发者构建、训练和部署神经网络模型。在神经网络模型中,输出层是尤为关键的部分,它负责将模型的预测结果以合适
    的头像 发表于 07-10 14:57 514次阅读

    神经网络预测模型构建方法

    神经网络模型作为一种强大的预测工具,广泛应用于各种领域,如金融、医疗、交通等。本文将详细介绍神经网络预测模型构建方法,包括模型设计、数据集准备、
    的头像 发表于 07-05 17:41 681次阅读

    keras模型转tensorflow session

    在这篇文章中,我们将讨论如何将Keras模型转换为TensorFlow session。 Keras和TensorFlow简介 Keras是一个高级神经网络API,它提供了一种简单、快速的方式来构建
    的头像 发表于 07-05 09:36 558次阅读

    如何在TensorFlow中构建并训练CNN模型

    在TensorFlow中构建并训练一个卷积神经网络(CNN)模型是一个涉及多个步骤的过程,包括数据预处理、模型设计、编译、训练以及评估。下面,我将详细阐述这些步骤,并附上一个完整的代码示例。
    的头像 发表于 07-04 11:47 972次阅读

    基于神经网络算法的模型构建方法

    神经网络是一种强大的机器学习算法,广泛应用于各种领域,如图像识别、自然语言处理、语音识别等。本文详细介绍了基于神经网络算法的模型构建方法,包括数据预处理、网络结构设计、训练过程优化、模型评估
    的头像 发表于 07-02 11:21 568次阅读

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

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

    【大语言模型:原理与工程实践】大语言模型的预训练

    增长。DeepMind在相关论文中指出,模型大小和训练Token数应以相似速率增长,以确保最佳性能。因此,构建模型规模相匹配的预训练数据至关重要。 在构建预训练数据时,不仅要考虑数
    发表于 05-07 17:10

    中国铁路网的Dijkstra算法实现案例

    该项目分别在DE1-SOC开发板的FPGA和HPS上实现了Dijkstra算法,能在中国铁路网中找到两站之间的最短距离和路线。
    的头像 发表于 04-09 11:10 617次阅读
    中国铁<b class='flag-5'>路网</b>的Dijkstra算法实现案例

    名单公布!【书籍评测活动NO.30】大规模语言模型:从理论到实践

    。 为了使更多的自然语言处理研究人员和对大语言模型感兴趣的读者能够快速了解大模型的理论基础,并开展大模型实践,复旦大学张奇教授团队结合他们在自然语言处理领域的研究经验,以及分布式系统和
    发表于 03-11 15:16