Net

netdiff.py#

此脚本用于比较两个 .net.xml 文件。调用

python tools/net/netdiff.py A.net.xml B.net.xml diff

将生成 4 个 纯 XML 网络 文件:

  • diff.nod.xml
  • diff.edg.xml
  • diff.con.xml
  • diff.tll.xml

这些文件包含已被删除、创建或修改的 XML 元素组(例如节点),可用于调查网络 AB 之间的差异。此外,这些文件可用于维护变更集,以实现可重复的修改:

netconvert --sumo-net-file A.net.xml -n diff.nod.xml -e diff.edg.xml -x diff.con.xml -i diff.tll.xml -o B.net.xml

上述调用可用于基于 A 和记录的变更集重新创建网络 B。请注意,对于任何已修改的元素(例如,某条边的速度限制已修改),文件 diff.edg.xml 仅包含已修改的属性。

netdiff.py 的典型用例如下:

  1. 从 OSM 导入网络(将其称为 A.net.xml
  2. 使用 netedit 进行一些修改(将其保存为新名称 B.net.xml
  3. 使用 netdiff.py 创建 diff 文件
  4. 在稍后日期,重新导入 OSM 网络(使用更新的 OSM 文件、新版本的 netconvert 或不同的选项)
  5. 重新应用 diff 文件,以避免使用 netedit 重复手动修正

在导入时打补丁#

如果要在初始网络导入期间应用补丁文件(例如从 OSM 导入),则必须设置 netdiff 选项 -i。由于在网络导入期间连接是被推测出来的,因此如果任何连接发生了更改,则必须在补丁文件中包含某条边的所有连接。这可以通过设置 -i--patch-on-import)来实现。

对与原始网络不同的网络打补丁#

有时,将网络 AB 之间的差异应用到另一个与 A 略有不同的网络 C 可能很有用。 在这种情况下,仅考虑部分更改(例如仅考虑创建的元素)可能很有用。

如果只想考虑 B 中新创建的元素(相对于 A),请打开每个差异文件(即 diff.edg.xml、diff.nod.xml、diff.con.xml、diff.tll.xml),并仅保留标题

<!-- Created Elements -->"

下的元素。这样,无论 C 与原始 A 有何不同,补丁都应该可以应用到网络 C

有时,由于连接或交通灯不一致,可能会发生错误。在这种情况下,仅使用 'diff.nod.xml' 和 'diff.edg.xml' 更新 C,并让 netconvert 推测相应的连接和交通灯可能很有用。

最后,应手动检查 CB 边界的所有区域,以确保一致性。

createRoundaboutConnections.py#

此脚本根据给定的网络为环岛生成附加连接。添加以下连接:

  • 车辆可以在环岛内的每条车道上行驶。
  • 如果有足够的出口车道,车辆即使行驶在内侧车道也可以离开环岛。

用法:

python tools/net/createRoundaboutConnections.py <net-file>

这将创建输出文件 roundabout-connection.con.xml,其中输入网络为 <net-file>

netcheck.py#

此工具检查网络(第一个参数)的弱连通性(即是否从每个节点到其他每个节点都存在路径,而不考虑边的方向),如果不连通,则打印连通分量。

此外,您可以运行此脚本来发现从特定边可以到达哪些边。

python tools/net/netcheck.py <net-file> --source <edge_id> --selection-output selection.txt

这将创建一个名为 selection.txt 的文件,该文件可以在 sumo-gui 中加载,以可视化从 *** 可达的网络部分。要可视化选择,您必须通过 **Edit->Edit chosen* 加载文件。然后,您需要在视图设置对话框 Street->Color by: selection** 中启用按选择状态为边着色。网络的可达部分将与不可达部分以不同的颜色显示,这通常足以找出网络建模错误。

选项可以缩短为 -s <edge_id> 表示源边,-o <filename> 表示选择输出。

使用选项 --destination <edge_id>-d <edge_id>,可以列出可以到达给定边的边。通过添加选项 --vclass <vClass>-l <vClass>,检查将变得车辆类别敏感。

选项 --component-output <filename>-c <filename> 将所有已识别的分量及其组成边写入指定文件。选项 --results-output <filename>-r <filename> 将整个网络的摘要(最大分量百分比覆盖范围和分量边计数分布)写入指定文件。

--component-output--results-output 选项与 --destination--source 选项不兼容。

使用选项 --help 获取最新版本信息。

xmledges_applyOffset.py 和 xmlnodes_applyOffset.py#

这两个工具将给定的偏移量应用于输入文件中边或节点的几何信息。结果分别写入 <XMLEDGES>.mod.xml 或 <XMLNODES>.mod.xml。

python tools/net/xmledges_applyOffset.py <XMLEDGES-FILE> <X-OFFSET> <Y-OFFSET>
python tools/net/xmlnodes_applyOffset.py <XMLNODES-FILE> <X-OFFSET> <Y-OFFSET>
  • <XMLEDGES-FILE>/<XMLNODES-FILE>: 边/节点文件,其内容将被平移
  • <X-OFFSET>: 要应用的 x 偏移量
  • <Y-OFFSET>: 要应用的 y 偏移量

xmlconnections_mapEdges.py#

从 "edgemap.txt" 读取边 ID 替换;该文件的格式为:

<OLD_EDGE_ID>-><NEW_EDGE_ID>

读取给定的连接文件 <CONNECTIONS-FILE>,并用新的边名替换旧的边名。结果写入 <CONNECTIONS-FILE>.mod.xml

python tools/net/xmlconnections_mapEdges.py <CONNECTIONS-FILE>
  • <OLD_EDGE_ID>: <CONNECTIONS-FILE> 中使用的边的 Id
  • <NEW_EDGE_ID>: 要使用的替代边的 Id
  • <CONNECTIONS-FILE>: 要更改的连接文件

net2kml.py#

将 '.net.xml' 道路几何转换为 KML 格式。

python tools/net/net2kml.py -n <net-file> -o output.kml

默认情况下,将导出正常的边几何。这可以通过以下选项进行更改:

  • --lanes: 写入车道几何
  • --internal: 写入路口内部边或车道
  • --junctions: 导出路口几何
  • --boundary: 写入边/车道边界而不是中心线
  • --traffic-lights: 为彩色信号灯写入坐标

net2geojson.py#

将 '.net.xml' 道路几何转换为 GeoJSON 格式。

python tools/net/net2geojson.py -n <net-file> -o output.geojson

默认情况下,将导出正常的边几何。这可以通过以下选项进行更改:

  • --lanes: 写入车道几何
  • --internal: 写入路口内部边或车道

还可以通过使用选项 --edgedata-file 加载边数据文件,用边相关数据(例如交通量或速度)丰富生成的 geojson。

split_at_stops.py#

生成一个带有 split 定义的 .edg.xml 补丁文件,以确保给定类型(默认为 <trainStop>)的每个公共交通站点都位于与其他每个站点分开的边上。该工具还会生成更新的 .net.xml 和站点文件。此外,它可以调整路线文件以匹配更新后的网络。

示例调用:

python tools/net/split_at_stops.py <stopfile> -n <net-file> -r <route-file> -o <output-net-file> --stop-output <output-stop-file> --route-output <output-route-file> --stop-type busStop

Note

stationDistricts.py --split-output FILE 实现了类似的功能,它在站点之间的中点处分割边。

abstractRail.py#

将大地测量铁路网络转换为抽象(示意性)铁路网络。 如果网络已分段(使用 stationDistricts.py),生成的网络将是多个示意性片段的混合体,这些片段大致按大地测量方向定向。

示例调用:

python tools/net/abstractRail.py -n input_net.net.xml --stop-file input_additional.add.xml --region-file stations.taz.xml --output-prefix abstract

也可以自动分段网络:

python tools/net/abstractRail.py -n input_net.net.xml --stop-file input_additional.add.xml --split --output-prefix abstract

其他选项#

  • --filter-regions: 仅转换给定的区域列表并删除其他所有内容
  • --keep-all: 过滤区域时,将所有其他区域保留在其旧几何形状中。这可用于构建特定于区域的补丁文件,然后可以组合起来修补网络的更大部分**
  • --horizontal: 抽象网络在水平方向上对齐
  • --track-offset: 定义平行轨道之间的偏移量(以米为单位,默认为 20)
  • --skip-building: 仅创建补丁文件,不组装新网络
  • --skip: 从站点文件创建区域文件(taz),可选择分割网络边以确保每条边属于单个站点

Caution

如果网络很大且未分段,或者各个站点段很大,则转换过程可能需要很长时间。选项 --skip-large INT 可用于选择性地跳过大的区域(通过优化约束的数量来衡量,通过 --verbose 输出报告)。

Caution

如果使用选项 --spit,原始网络可能会被分割(新文件名为 OLDNAME.split.net.xml),生成的抽象网络将具有与分割网络相同的边。输入的站点文件也将针对分割网络进行调整(新文件名为 OLDNAME.split.add.xml),但任何交通需求(路线文件)都必须针对分割网络进行调整。这可以通过调用 duarouter -n net.split.net.xml.gz -a stops.split.add.xml -r old.rou.xml -o new.rou.xml --repair --ignore-errors --skip-new-routes --ptline-routing 来完成。

remap_additionals.py#

如果网络具有相似的几何形状,则将基础设施从一个网络重新映射到另一个网络。网络之间的以下差异是可以接受的:

  • 边 ID 已更改
  • 车道数量和通行权限已更改
  • 边的分割和连接已更改
  • 几何形状有微小变化

如果车道发生变化,则会考虑通行权限以选择合适的替代车道。

示例调用:

python tools/net/remap_additionals.py --orig-net input_net.net.xml --target-net input_net2.net.xml -a input_additional.add.xml -o out.add.xml

remap_renamed.py#

如果新网络的每条车道上都有一个 origId 参数,该参数反映了原始网络的边 ID,则将基础设施、车辆、路线或选择文件从一个网络重新映射到另一个网络。支持的用例是使用选项 --numerical-ids 转换原始网络,然后转换其他场景文件,以便可以与新网络一起使用。

示例调用:

python tools/net/remap_additionals.py -n input_net2.net.xml -r input_routes.rou.xml -o out.rou.xml
python tools/net/remap_additionals.py -n input_net2.net.xml -a input_additionals.add.xml -o out.add.xml
python tools/net/remap_additionals.py -n input_net2.net.xml -s input_selection.txt -o selection.txt

remap_network.py#

计算两个几何形状有些相似(但分割、连接、ID 等不同)的网络之间的对应关系。输出是一个 csv 文件,包含原始边到零个或多个目标边的一对多映射。 对于每个目标边,列出了公共长度(以米为单位)以及目标边被原始边覆盖的比例。有关映射质量的输出将写入 --success-output

示例调用:

python tools/net/remap_network.py --orig-net net.net.xml --target-net net2.net.xml -o out.csv --success-output success.txt