属性名 id X Y type
是否必需 是 是 是 否
id(string) Float Float
值类型
节点名
描述
平面上节点的x位置(米) 平面上节点的y位置(米) 节点的类型(可选)
枚举型
(priority,traffic_light,right_before_left)
如果没有输入节点类型,NETCONVERT会自动猜测,但是这可能不是你希望的类型。以下类型是可用的,任何其他字符串都会出错,并导致程序终止: ? priority: 车辆必须等待,直到它们右侧车辆完全通过路口。
Vehicles have to wait until vehicles right to them have passed the junction ? traffic_light: 交叉口被交通灯控制着
? right_before_left: 来自右边的车辆优先通过
Vehicles will let vehicles coming from their right side pass.
当编辑节点文件时,牢记把节点定义嵌入到标记内部。一个完整的文件应如下面的”cross31.nod.xml”文件所示(cross_notypes):
正如你看到的,仅有第一个节点命名为“0”(网络的中心节点),这是一个交通灯控制的路口,其他所有节点不受控制。你可能还注意到,街道的两端各需关联一个节点,很快你会发现这其实不必要,但这使概念理解变得容易:每个边连接两个节点。
5.5.边的描述
5.5.1.一般描述
边和节点的描述差不多,但具有其他的参数。在边文件里,每个边的描述是这样的:
length=\
这是什么意思呢?知道XML文件的人注意到“( )”及“|”不不允许使用的。我们想表达那个参数是可选的。对起始和终止节点的定义,你可以使用node_id,也可以使用它们的位置。对于后者,将自动在指定的位置创建节点。每个边都是单向的:从起始节点开始,在终止节点结束。如果所给出的节点名字不能提取(因为在节点文件中没有定义),将会产生错误。
对每条边,应提供更多的属性,如拥有的车道数,允许的最大车速,边的长度(米)。而且,还可以定义优先级(可选)。所有这些值(除了长度),可以使用相关的属性值给出,或者给边一个类型以省略它们(如果是后者,你需要编辑一个类型文件),这里给出的类型名必须在类型文件中存在,否则会出错。即使你提供了类型,仍然可以提供车道数,速度,优先权等参数来覆盖这个类型值。也可以完全不用理会边的参数,这时将使用默认值:使用单车道,默认优先权,最大允许速度为13.9m/s(50km/h),变长靠计算起止点的长度获得。
“边”可能有着复杂的几何形状,我们可以在形状标签里提供边的形状信息。如果边长未给出,则形状长度会被累加(以获得边长)。spread_type=”center”(延伸类型)强制
NETCONVERT在起止点之间双向延展车道(对于connection),或者从构成形状的线条集里延展车道。如果值为空,车道默认向右延伸。
列出边的属性如下: 属性名 Id formnode Tonode Type Nolanes Speed Priority Length Shape
是否必需 是 否(下同)
值类型 Id(string) 参考node id 参考node id 参考type id Int Float Int Float
边的名字
边的起始节点,需在节点文件中存在 边的终止节点,需在节点文件中存在 类型文件中的类型名 边的车道数,必须是整数
边允许的最大车速(m/s),必须是浮点数 边的优先权 边长(m)
描述
位置列表,用x,从形状的定义里,起止节点被忽略。例如:y表示,单位米 tonode=\描述一个边,从节点0开始,首先经过点(0,0),然后向右行100米,最后到达节点1 枚举类型 (right,center) 描述怎样延展车道;center表示双向延展车道,其他值为右向延展 Spread_type 表中未提及的属性: Xfrom,yfrom,xto,yto分别表示边将开始的节点的x,y位置,及终止节点的x,y位置,单位是米,必须是浮点数。 优先权在节点处的让路规则计算中扮演重要角色。一般情况,道路允许的最高车速和其拥有的车道数被用来计算那条路拥有更高的优先权(交叉口处)。我们可以这样来增加优先权:让道路拥有更多的车道,或者让来自该道路的车辆不用等待直接进入路口。 边的定义信息也必须包含在标签内部,如下所示 ( 在这个例子中,我们使用了边的明确定义,使用类型的例子在类型描述一节介绍。 警告: 对街道id有一些约束: 不能包含任何以下字符'_'(下划线 用来标识车道id), '[' and ']' (标识枚举类型), ' ' (空格,用来分隔列表), '*' (星, 作为通配符), ':' (冒号, as marker for internal lanes). 5.5.2.定义允许的车辆类型 从0.9.5版本开始,可以显式指定该车道允许或禁止的车辆类别。允许的车辆类别信息在边描述文件的车道列表里指定。加入你想仅允许公共汽车在“2si”号道路的最左车道行驶(即设置公交专用道),可以简单更改边定义如下: ... previous definitions ... ... further definitions ... 如果你想禁止乘客和出租车,可以这样: ... previous definitions ... ... further definitions ... 目前车道定义包括如下属性: 属性名 Id Allow disallow 是 否 否 是否必需 int 值类型 描述 枚举车道id(0代表最右边的车道,车道数-1是最左边车道) 允许车辆类别的详细类别 禁止车辆类别的详细类别 车辆类别列表 车辆类别列表 允许和禁止属性都假定获得一个用分号分隔的车辆类别名字列表,参考车辆类别(\)。 5.5.3.路段定义 一般每条道路有一定的车道数,道路加宽定义成使用加宽后的道路,尽管在某些情况下,设置单一道路和改变道路长度内的车道数更方便。 在2009.02.09版后,可以使用“split”—XML中边定义的一个子元素。Split必须这样使用: ... previous definitions ... ... further definitions ... 这表示:从起始位置开始30米处开始分裂,插入一个名为 最常用的例子是:必须增加车道,沿道路不应减少车道,这样来表示这个应用: ... previous definitions ... ... further definitions ... 需记住两点: 1) 道路定义中,我们使用最大车道数是3(在目前版本好像没有限制) 2) 在位置0处添加一个split,该例子中并不创建节点,但是车道号直接用来标识边。 分裂的定义使用如下属性: 属性名 Pos 是否必需 是 值类型 Float 描述 在边的这个位置上开始分裂(m),如果给的是负数,则从边的末尾开始算起。 lanes 是 车道id列表 在分裂点后哪些车道会存在 5.5.4.边类型描述 如上所述,“边类型”用来简化边的定义。每条边的描述应该包含车道数、允许的最大车速、边的优先权(可选)。为避免每条边都定义详细的参数,可以使用边类型(它把这些参数封装成一个名字)。这个定义的格式是: 边类型的属性和边自身的参数是相同的: 属性名 Id Nolanes speed Priority discard 是否必需 是 Int Float Int boolean 值类型 Id(string) 类型名字 边的车道数,必须是整型值 该边允许的最大车速(m/s),必须是浮点数 边的优先权 该类型的边是否不应被导入 描述 没有在类型描述里给出边的起始点和终止点的信息,它们仅能在边的属性里设置。下面是一个参考边类型的边的定义: 相关的类型文件是这样的: 如上所示,我们把边分为\三个类别,并为每个类定义一个描述。这样做的结果和以上cross_notypes文件的结果相同。 5.6.连接描述(Connection) \描述一个节点的驶入边和驶出边怎么联系,确切地讲,哪些边接近驶入边,哪些车道用来接近这些边。尽管有可能,但还是应该避免为“特定驶入边”到“特定驶出车道”设置多于一个的“连接”。SUMO中的车辆并不知道这条路上设置的冲突。 显式设置一条边(或车道)与哪些边(或车道)相关联 如果没有给出,边或车道间的连接定义可以手工设置,并使用连接文件传给 NETCONVERT。连接文件指定通过哪条输入边可以到达驶出边,并规定应该使用哪些车道(双向,可选)。 如果仅想描述从指定边都能到达哪些边,则定义是这样的: 这告诉NETCONVERT,车辆不仅被允许从 属性名 是否必需 值类型 描述 from 是 参考edge id 车辆离开的边 to 车辆可以从输出边进否 参考edge id 入的边 使用这种输入类型时,如果连接边多于一条,NETCONVERT会计算该使用哪条车道。如果想用手动设置覆盖这个计算,可以这样: from=\