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 元素组(例如节点),可用于调查网络 A 和 B 之间的差异。此外,这些文件可用于维护变更集,以实现可重复的修改:
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 的典型用例如下:
- 从 OSM 导入网络(将其称为 A.net.xml)
- 使用 netedit 进行一些修改(将其保存为新名称 B.net.xml)
- 使用
netdiff.py创建 diff 文件 - 在稍后日期,重新导入 OSM 网络(使用更新的 OSM 文件、新版本的 netconvert 或不同的选项)
- 重新应用 diff 文件,以避免使用 netedit 重复手动修正

在导入时打补丁#
如果要在初始网络导入期间应用补丁文件(例如从 OSM 导入),则必须设置 netdiff 选项 -i。由于在网络导入期间连接是被推测出来的,因此如果任何连接发生了更改,则必须在补丁文件中包含某条边的所有连接。这可以通过设置 -i(--patch-on-import)来实现。
对与原始网络不同的网络打补丁#
有时,将网络 A 和 B 之间的差异应用到另一个与 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 推测相应的连接和交通灯可能很有用。
最后,应手动检查 C 和 B 边界的所有区域,以确保一致性。
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 中加载,以可视化从
选项可以缩短为 -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
