停车区域#
可以使用 <parkingArea> 元素定义道路网络之外的停车区域(路侧停车或停车场)。这实现了以下目的:
- 可以定义任意的停车位置和角度,以可视化鱼骨式或平行式停车
- 道路网络外的停车位可以限制为设定的容量
- 当停车区域满时,可以触发自动重定向到替代停车区域
定义#
路侧停车区域的定义如下:
<parkingArea id="ParkAreaA" lane="a_0" startPos="200" endPos="250" roadsideCapacity="5" angle="45" length="30"/>
此外,可以定义单独的停车位:
<parkingArea id="ParkAreaB" lane="b_0" startPos="240" endPos="260" roadsideCapacity="0" width="5" length="10" angle="30">
<space x="853" y="623"/>
<space x="863" y="618"/>
<space x="873" y="613"/>
<space x="883" y="608"/>
<space x="893" y="603"/>
<space x="848" y="611" width="4" length="8" angle="120"/>
<space x="858" y="606" width="4" length="8" angle="120"/>
<space x="868" y="601" width="4" length="8" angle="120"/>
<space x="878" y="596" width="4" length="8" angle="120"/>
<space x="888" y="591" width="4" length="8" angle="120"/>
</parkingArea>
停车区域的总容量由其 roadsideCapacity 和 <space> 元素的数量之和给出。
parkingArea 支持以下属性:
| 属性名称 | 值类型 | 值范围 | 默认值 | 描述 |
|---|---|---|---|---|
| id | string | id | 停车区域的名称;必须是唯一的 | |
| lane | string | 有效的车道 id | 停车区域所在的车道名称 | |
| startPos | float | -lane.length < x < lane.length (负值从车道末端向后计数) | 0 | 车道上的起始位置(车道上较低的位置),单位为米 |
| endPos | float | -lane.length < x < lane.length (负值从车道末端向后计数) | lane.length | 车道上的结束位置(车道上较高的位置),单位为米,必须比 startPos 大 0.1m 以上 |
| friendlyPos | bool | true,false | false | 是否自动更正无效的停止位置(默认 false) |
| name | string | 简单字符串 | 描述停车区域的任意文本。仅用于可视化目的。 | |
| roadsideCapacity | int | 非负数 | 1 (如果未定义停车位,否则为 0) | 路侧停车位的数量 |
| onRoad | bool | false | 车辆停车时是否保持在道路上。 注意: 如果设置为 true,则仅使用 roadsideCapacity,不允许使用 <space> 定义。 |
|
| width | float | 正数 | 3.2 | 路侧停车位的宽度 |
| length | float | 正数 | (endPos - startPos) / roadsideCapacity | 路侧停车位的长度 |
| angle | float (度) | 0 | 路侧停车位相对于车道角度的角度,正值表示顺时针方向 | |
| lefthand | bool | false | 路侧停车位是否绘制在车道的左侧 | |
| acceptedBadges | string list | 允许访问停车区域的关键词集合(空值表示所有车辆均可自由访问) |
自定义停车位#
space 元素支持以下属性:
| 属性名称 | 值类型 | 值范围 | 默认值 | 描述 |
|---|---|---|---|---|
| x | float | 停放车辆的 x 位置(米) | ||
| y | float | 停放车辆的 y 位置(米) | ||
| z | float | 0 | 停放车辆的 z 位置(米) | |
| width | float | 父停车区域的 width 值 | 停车位的宽度 | |
| length | float | 父停车区域的 length 值 | 停车位的长度 | |
| angle | float (度) | 父停车区域的绝对角度(车道角度 + angle 属性) | 停车位的绝对角度 | |
| slope | float (度) | 0 | 停车位的坡度角度 |
Caution
请注意,必须通过 --additional-files 参数将停车区域添加到配置中(参见 additional-file)。
让车辆在停车区域停止#
要声明在停车位置停止的车辆,必须将 <stop> 定义作为车辆或其路径的一部分:
<vehicle id="0" depart="0">
<route edges="e1 e2 e3"/>
<stop parkingArea="pa0" duration="20"/>
</vehicle>
这里定义的是一个名为 "0" 的车辆,它在停车区域 "pa0" 停止。请注意,该停车区域的车道必须属于车辆路径的 "e1, e2, e3" 边之一。
有关车辆 "stop" 元素属性的完整列表,请参见 定义车辆、车辆类型和路径#停止点。
对进入和离开停车位时的机动时间进行建模#
当设置(布尔)选项 --parking.maneuver 时,车辆在离开和进入 parkingArea 时将在道路上花费额外的时间。此时间取决于停车位相对于道路车道的角度,可以使用 vType 属性 maneuverAngleTimes 进行配置。这是一个逗号分隔的数字三元组列表,形式为 角度 进入时间 离开时间:
<vType id="example" maneuverAngleTimes="10 3.0 4.0,80 1.6 11.0,110 11.0 2.0,170 8.1 3.0,181 3.0 4.0"/>
使用与最接近角度对应的值。maneuverAngleTimes 的值初始化为特定于 vClass 的值:
- 默认值:
maneuverAngleTimes="10 3 4,80 1 11,110 11 2,170 8 3,181 3 4" - truck, trailer, coach, delivery:所有时间相比默认值加倍
- bicycle, moped:
maneuverAngleTimes="181 1 1"
当当前停车区域已满时重新规划路线#
如果车辆到达已满的停车区域,它必须在道路上等待,直到有空位或重新规划路线到新的停车区域。
限制对停车区域的访问#
在现实世界中,对停车场的访问可能受限于不同类型的用户,例如居民、顾客或员工。由于这些访问权限可能因地点而有很大差异,因此使用与车辆类别分开的权限系统进行建模。可以通过以下方式限制对停车区域的访问:
- 停车区域在 acceptedBadges 属性中定义一组接受的徽章(关键词),这些徽章模拟了单个访问权限,例如
acceptedBadges="clients_supermarket employees_supermarket" - 车辆或车辆类型定义了它们拥有的徽章集合,这些徽章赋予它们访问权限,例如
parkingBadges="employees_supermarket home_johndoe" - 任何未受限制的停车区域(acceptedBadges 属性为空)或其中至少一个接受的徽章出现在车辆或车辆类型定义中的停车区域都可以访问
Caution
车辆定义中定义的停车徽章会覆盖车辆类型设置。
导入/生成停车区域#
存在以下工具来获取停车区域定义:
- generateParkingAreas.py:为整个网络进行概率生成
- generateParkingLots.py:生成空间定义以填充给定形状
- netedit:可视化地定义停车区域
- netconvert --parking-output:从 OSM 导入路侧停车区域
- SAGA generateParkingAreasFromOSM.py:从 OSM 导入各种类型的停车区域
TraCI#
有关停车区域的一些信息可以直接使用 traci.simulation.getParameter() 调用 访问。
- parkingArea.capacity:停车位总数(roadsideCapacity +
<space>元素的数量) - parkingArea.occupancy:在此停车区域停放的车辆数量
