SUMO学习入门 (二)路网文件的生成

本文详细介绍了如何创建SUMO路网文件的七种方法,包括使用netconvert转换不同格式的路网数据,从网页浏览器下载城市地图,利用OSMWebWizard.py,从openstreetmap官网获取地图,使用netedit直接绘制,手动编写路网文件,以及使用netgenerate自动生成抽象路网。每种方法的步骤和优缺点均有说明,适合不同需求的SUMO用户参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:该文章为博主转载自知乎用户:侘寂升平,侵删!

非常感谢知乎朋友无私分享的sumo系列文章,给了我很多的指导!欢迎读者关注该博主!

以下为转载正文:

一、 概述

SUMO的路网文件模拟车辆通过的道路和交叉口,通常“edges”代表道路,“junctions”代表交叉口,文件名的后缀为“net.xml”。SUMO中路网文件的编写可以手动编写,也可以用netconvert命令转换第三方来源中的复杂路网。总体包括道路、交叉口的id和位置信息、车道信息(数量、长度、最大速度、形状、功能等)、优先权信息、交通信号信息、交叉口信息等。这次总共介绍了七种生成SUMO路网文件的方法,分别是:netconvert转换、运用网页浏览器下载城市地图、利用OSMWebWizard.py截取路网、openstreetmap官网中截取地图为osm文件、netedit画图、直接写路网文件、抽象路网netgenerate

二、netconvert转换

1、通过在命令提示符(cmd)中输入netconvert指令,能够将多种第三方的路网文件转化为SUMO可读的文件,具体可转化的第三方来源有:

OpenStreetMap(一种开源的地图引擎)
PTV Vissim
OpenDrive
MATsim
ArcView
Elmar Brockfelds unsplitted and splitted NavTeq-data
RoboCup Rescue League folders

2、示例

运用netconvert时,注意要指定输入输出的文件名,输入为路网文件,输出为SUMO-道路文件。

  1. 将Vissim格式的路网转化为SUMO可读格式:
netconvert—visum=VisumNet.inp—output-file=SUMONet.net.xml
  1. 将osm文件转化为SUMO可读格式:
netconvert—osm-files map.osm -o map.net.xml(注意“-o”为“-output-files”的简写)

(三、四、五本质都是得到osm文件,再用netconvert进行转换)

三、运用网页浏览器下载城市地图

1、访问OSM Overpass API query page

http://www.overpass-api.de/query_form.html),在“Overpass API Query Form”框中输入下方所示代码(在代码name处改城市名称):

<query type="relation">
<has-kv k="boundary" v = "administrative"/>
<has-kv k="name" v = "上海市"/>
</query>
<print mode="body"/>

2、点击框旁“Query”,下载文件,文件以记事本方式打开,在文件中找到城市id号,如图中,上海市的id号为“913067”
在这里插入图片描述

3、为了得到城市的地图,在id号的基础上加3,600,000,000,得到id结果为3600913067

4、再次返回第1步中的网页界面,在“Overpass API Query Form”框中输入下方所示代码,其中area-query ref改为第3步中的"3600913067":

<osm-script timeout="1800" element-limit="100000000">
<union>
<area-query ref="3600913067"/>
<recurse type="node-relation" into="rels"/>
<recurse type="node-way"/>
<recurse type="way-relation"/>
</union>
<union>
<item/>
<recurse type="way-node"/>
</union>
<print mode = "body"/>
</osm-script>

5、再次点击“Query”,保存文件,手动增加文件后缀“.osm”

6、利用netconvert转换osm文件

缺点:下载速度缓慢,文件比较大

四、利用OSMWebWizard.py截取路网

1、OSMWebWizard.py是SUMO自带的程序,具体在“tools-OSMWebWizard.py”,直接运行可打开如下网页,点击“Select Area”即可选取所需路网
在这里插入图片描述

2、点击汽车图标,相当于交通需求的输入,可选取该路网中产生的车辆数、行人数等
在这里插入图片描述

3、点击上图中“Generate Scenario”,等待文件下载

4、文件下载后自动打开sumo-gui,点击开始就可仿真
在这里插入图片描述

缺点:Generate Scenario后文件下载速度慢了点

五、openstreetmap官网中截取地图为osm文件

osm官网:https://www.openstreetmap.org/export#map=16/32.0552/118.7941
在这里插入图片描述

六、netedit画图

1、在 SUMO学习入门 (一)SUMO介绍 中我们讲过NETEDIT,打开netedit,在Network中可以绘制路网文件
在这里插入图片描述

2、netedit是非常有用的,之后会在一期中细讲其创建路网的步骤,在SUMO官网中有很多案例,网上也有关于案例的中文版翻译,在初期学习的时候可以先跟着案例走。

七、直接写路网文件

1、编写network文件需要定义node节点文件以及edge边文件,相当于用点和边绘制路网。除此之外。Edge还可写两类文件:Type属性文件以及connection文件,但非必要。

2、node文件

node节点文件就是节点的信息,创建如下node file,命名为 my_nod.nod.xml:

<nodes>
 <node id="n1" x="-500" y="0" type="priority"/> 
 <node id="n2" x="-250" y="0" type="traffic_light"/>
 <node id="n3" x="-150" y="200" type="traffic_light"/>
 <node id="n4" x="0" y="0"/>
 <node id="n5" x="150" y="200"/>
</nodes>

可以看到node文件中包括基础的id信息、x、y代表位置信息,type是有关节点的属性,这四个是比较基础的属性。其他属性如下图,官网中有较为详细的解释:
在这里插入图片描述

3、edge文件

edge就是边的信息,每条边都是单向边,关于边的属性常用的有开始、结束的节点名、车道数、最大速度等,官网中罗列的属性如下:
在这里插入图片描述

示例创建对应上述路网的 edge file,名为 my_edge.edg.xml,内容如下:

<edges>
 <edge from="n1" to="n2" id="1to2" type="3L45"/>
 <edge from="n2" to="n3" id="2to3" type="2L15"/>
 <edge from="n3" to="n4" id="3to4" type="3L30"/>
 <edge from="n4" to="n5" id="out" type="3L30"/>
</edges>

3、利用netconvert命令生成“.net.xml”文件
在这里插入图片描述

4、type文件

type文件其实与上述中的type属性相同,写它的原因主要是为了方便,可以省略很多代码量,以官网中的案例做示范:

<edges>
 <edge id="1fi" from="1" to="m1" type="b"/>
 <edge id="1si" from="m1" to="0" type="a"/>
 <edge id="1o" from="0" to="1" type="c"/>
 <edge id="2fi" from="2" to="m2" type="b"/>
 <edge id="2si" from="m2" to="0" type="a"/>
 <edge id="2o" from="0" to="2" type="c"/>
 <edge id="3fi" from="3" to="m3" type="b"/>
 <edge id="3si" from="m3" to="0" type="a"/>
 <edge id="3o" from="0" to="3" type="c"/>
 <edge id="4fi" from="4" to="m4" type="b"/>
 <edge id="4si" from="m4" to="0" type="a"/>
 <edge id="4o" from="0" to="4" type="c"/>
</edges>

上述edge文件中的type=“a”、“b”、“c”其实就是用type文件进行定义的,type文件中可包含优先级、车道数、最大速度的信息,如下:

<types>
 <type id="a" priority="3" numLanes="3" speed="13.889"/>
 <type id="b" priority="2" numLanes="2" speed="11.111"/>
 <type id="c" priority="1" numLanes="1" speed="11.111"/>
</types>

5、connection文件

connection文件其实就是将边(edge)与边之间联系在一起,即边转向功能。
在这里插入图片描述

connection文件主要的两个属性为“from”和“to”,from指上游边,to指下游边,示例如下:

<connections>
 <connection from="1si" to="3o"/>左方来车右转
 <connection from="1si" to="2o"/>左方来车直行
 <connection from="2si" to="4o"/>右方来车右转
 <connection from="2si" to="1o"/>右方来车直行
</connections>

八、抽象路网netgenerate

netgenerate允许生成三种类型的抽象网络:网格grid,蜘蛛spider,随机random

以建立网格文件为例:描述在x方向和y方向上建立多少个交叉点以及它们应该彼此相距多远。

结点数的参数是 –grid.x-number 和 –grid.y-number

结点之间的距离是 –grid.x-length 和 –grid.y-length

如果要构建两个轴具有相同值的网络,使用 –grid.number 和 –grid.length ,长度以米为单位。使用如下命令输入cmd中生成网格网络:

netgenerate --grid --grid.x-number=10 --grid.y-number=5 --grid.length=400 --output-file=netgenerateFile.net.xml

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值