“OpenStreetMap 是一个免费、可编辑的全球地图。它是由像您一样的人们创建的。”(摘自 https://www.openstreetmap.org)。本页描述如何将包含 OpenStreetMap 数据的文件转换为 SUMO 网络文件。
有多种方法可以将数据从 OpenStreetMap 下载到文件。请阅读 Networks/Import/OpenStreetMapDownload 以了解相关方法。有关文件格式的更多信息,请参见 OpenStreetMap file。
三步点击生成场景#
通过使用 osmWebWizard.py 脚本,可以快速轻松地构建完整场景。网络将根据所选交通模式的选项和类型映射(typemap)进行导入。如果需要更多控制,可以使用下文所述的选项。
导入道路网络#
netconvert 可以原生导入 OSM 文件。对应的选项是 --osm-files <FILE>[,<FILE>]* 或简写为 --osm <FILE>[,<FILE>]*。
以下对 netconvert 的调用导入了存储在 "berlin.osm.xml" 中的道路网络,并将由此数据生成的 SUMO 网络存储到 "berlin.net.xml" 中:
netconvert --osm-files berlin.osm.xml -o berlin.net.xml
OSM 数据始终使用 WGS84 地理坐标,netconvert 会自动将其转换为 UTM(自 sumo 0.11.1 起)。因此,仅当需要不同的投影时才需要显式指定投影参数。有关其他转换选项,请参阅 netconvert 文档。
Note
导入网络的某些方面可能需要根据您的需求进行修改。下文描述了部分相关的 netconvert 选项。如需更灵活的修改,请参见 Tutorials/ScenarioGuide#Modifying_the_Network。
两次调用中指定的图块数量必须匹配。
推荐的 netconvert 选项#
--geometry.remove --ramps.guess --junctions.join --tls.guess-signals --tls.discard-simple --tls.join --tls.default-type actuated
原理:
- --geometry.remove : 简化网络(节省空间),不改变拓扑结构
- --ramps.guess : OSM 数据通常不包含加速/减速车道。此选项识别可能包含这些附加车道的道路并将其添加
- --junctions.join : 参见 #Junctions
- --tls.guess-signals --tls.discard-simple --tls.join : 参见 #Traffic_Lights
- --tls.default-type actuated : 默认的静态交通灯是在不了解交通模式的情况下定义的,在高流量情况下可能效果不佳
靠左行驶的国家#
Caution
导入采用靠左行驶规则的网络时,必须设置选项 --lefthand。
推荐的类型映射(Typemaps)#
从 OSM 导入数据时存在多个自由度。有时,原始数据中缺少诸如限速之类的信息,必须从道路的抽象类型(例如 motorway)推断。不同的仿真场景需要不同的交通模式,因此需要导入交通基础设施的不同部分。进行这些选择的工具是类型映射。SUMO 在文件夹 <SUMO_HOME>/data/typemap/ 中提供了推荐的类型映射。说明如下。
- osmNetconvert.typ.xml 默认设置,适用于乡村和高速公路场景。在未指定用户类型时使用此文件。所有其他类型映射都旨在作为此类型映射的补丁。
- osmNetconvertUrbanDe.typ.xml 更改默认速度以反映典型的城市限速(50km/h)。
- osmNetconvertPedestrians.typ.xml 为某些边缘类型添加人行道,并设置适合行人仿真的通行权限。
- osmNetconvertBicycle.typ.xml 调整自行车道的宽度。
- osmNetconvertShips.typ.xml 导入水道和轮渡路线。此类型映射可以与任何其他类型映射结合使用。
- osmNetconvertRailUsage.typ.xml 导入铁路的附加使用信息(干线、支线、工业等)。此类型映射仅与其他类型映射结合使用。
- osmNetconvertBidiRail.typ.xml。将默认的单向铁路更改为双向铁路。在世界上某些 OSM 贡献者使用这种数据表示风格的地区,这可能很有用。使用此类型映射取代了旧选项 --osm.railway.oneway-default <BOOL>。
- osmNetconvertAirport.typ.xml。导入航空道(跑道、滑行道等)。
Caution
使用选项 --type-files 指定类型映射时,默认映射不会加载。为实现所需的类型,用户应加载默认类型映射以及所需的修改(--type-files <SUMO_HOME>/data/typemap/osmNetconvert.typ.xml,<SUMO_HOME>/data/typemap/osmNetconvertUrbanDe.typ.xml),或自行创建完全指定的类型映射文件。
自行车交通#
可以使用选项 --osm-bike-access 导入自行车基础设施。它将评估 bicycle=yes/no 标签 以及自行车的单向信息,并触发添加单独的自行车道。如果您想根据街道类型修改自行车道的宽度,请使用上面提到的自行车类型映射。
行人交通#
默认情况下,仅导入人行道(专供行人使用的 OSM 路径)。要导入所有与人行道相关的信息,可以设置选项 --osm.sidewalks。或者,可以通过类型映射(见上文)或猜测选项启发式地添加人行道。
车道到车道的连接#
默认情况下,netconvert 会猜测车道到车道的连接,并且仅从 OSM 加载转弯限制以影响连接生成。当设置选项 --osm.turn-lanes 时,会评估 OSM 中的转弯方向道路标线以指导连接生成。
Caution
在某些车道有转弯标线而其他车道没有的道路上,未标记的车道将被解释为直行车道。这在所有情况下可能都不正确。
导入附加多边形(建筑物、水域等)#
OSM 数据不仅包含道路网络,还包含大量附加多边形,如建筑物和河流。这些多边形可以使用 polyconvert 导入,然后添加到 sumo-gui 配置中。
要解释 OSM 数据,需要一个额外的 typemap 文件(下面的示例与 <SUMO_HOME>/data/typemap/osmPolyconvert.typ.xml 相同):
<polygonTypes>
<polygonType id="waterway" name="water" color=".71,.82,.82" layer="-4"/>
<polygonType id="natural" name="natural" color=".55,.77,.42" layer="-4"/>
<polygonType id="natural.water" name="water" color=".71,.82,.82" layer="-4"/>
<polygonType id="natural.wetland" name="water" color=".71,.82,.82" layer="-4"/>
<polygonType id="natural.wood" name="forest" color=".55,.77,.42" layer="-4"/>
<polygonType id="natural.land" name="land" color=".98,.87,.46" layer="-4"/>
<polygonType id="landuse" name="landuse" color=".76,.76,.51" layer="-3"/>
<polygonType id="landuse.forest" name="forest" color=".55,.77,.42" layer="-3"/>
<polygonType id="landuse.park" name="park" color=".81,.96,.79" layer="-3"/>
<polygonType id="landuse.residential" name="residential" color=".92,.92,.89" layer="-3"/>
<polygonType id="landuse.commercial" name="commercial" color=".82,.82,.80" layer="-3"/>
<polygonType id="landuse.industrial" name="industrial" color=".82,.82,.80" layer="-3"/>
<polygonType id="landuse.military" name="military" color=".60,.60,.36" layer="-3"/>
<polygonType id="landuse.farm" name="farm" color=".95,.95,.80" layer="-3"/>
<polygonType id="landuse.greenfield" name="farm" color=".95,.95,.80" layer="-3"/>
<polygonType id="landuse.village_green" name="farm" color=".95,.95,.80" layer="-3"/>
<polygonType id="tourism" name="tourism" color=".81,.96,.79" layer="-2"/>
<polygonType id="military" name="military" color=".60,.60,.36" layer="-2"/>
<polygonType id="sport" name="sport" color=".31,.90,.49" layer="-2"/>
<polygonType id="leisure" name="leisure" color=".81,.96,.79" layer="-2"/>
<polygonType id="leisure.park" name="tourism" color=".81,.96,.79" layer="-2"/>
<polygonType id="aeroway" name="aeroway" color=".50,.50,.50" layer="-2"/>
<polygonType id="aerialway" name="aerialway" color=".20,.20,.20" layer="-2"/>
<polygonType id="shop" name="shop" color=".93,.78,1.0" layer="-1"/>
<polygonType id="historic" name="historic" color=".50,1.0,.50" layer="-1"/>
<polygonType id="man_made" name="building" color="1.0,.90,.90" layer="-1"/>
<polygonType id="building" name="building" color="1.0,.90,.90" layer="-1"/>
<polygonType id="amenity" name="amenity" color=".93,.78,.78" layer="-1"/>
<polygonType id="amenity.parking" name="parking" color=".72,.72,.70" layer="-1"/>
<polygonType id="power" name="power" color=".10,.10,.30" layer="-1" discard="true"/>
<polygonType id="highway" name="highway" color=".10,.10,.10" layer="-1" discard="true"/>
<polygonType id="railway" name="railway" color=".10,.10,.10" layer="-1" discard="true"/>
<polygonType id="boundary" name="boundary" color="1.0,.33,.33" layer="0" fill="false" discard="true"/>
<polygonType id="admin_level" name="admin_level" color="1.0,.33,.33" layer="0" fill="false" discard="true"/>
</polygonTypes>
使用类型映射文件 typemap.xml,以下对 polyconvert 的调用将从 OSM 数据导入多边形并生成 Sumo 多边形文件。
polyconvert --net-file berlin.net.xml --osm-files berlin.osm --type-file typemap.xml -o berlin.poly.xml
创建的多边形文件 berlin.poly.xml 可以添加到 sumo-gui 配置中:
<configuration>
<input>
<net-file value="berlin.net.xml"/>
<additional-files value="berlin.poly.xml"/>
</input>
</configuration>
铁路特定对象#
使用类型映射 <SUMO_HOME>/data/typemap/osmPolyconvertRail.typ.xml,可以导入众多与铁路相关的兴趣点(POI),例如:
- 车站
- 道岔
- 停车位置
- 站台
- 位置标记
导入脚本#
辅助脚本 osmGet.py 允许下载大面积区域。生成的名为 "<PREFIX>.osm.xml" 的文件可以使用脚本 osmBuild.Py 导入。这两个脚本都位于 <SUMO_HOME>/tools 中。
调用方式如下:
osmGet.py --bbox <BOUNDING_BOX> --prefix <NAME>
osmBuild.py --osm-file <NAME>.osm.xml [--vehicle-classes (all|road|passenger)] [--type-file <TYPEMAP_FILE>] [--netconvert-options <OPT1,OPT2,OPT3>] [--polyconvert-options <OPT1,OPT2,OPT3>]
如果参数为 "road",则仅提取道路车辆可用的道路;如果为 "passenger",则仅提取乘用车可通行的道路。
使用选项 --type-file 时,将生成一个附加的输出文件,其中包含河流和建筑物的多边形以及兴趣点(POI)。这可以在 sumo-gui 中加载以进行额外的可视化。有用的类型映射文件可以在 <SUMO_HOME>/data/typemap/ 中找到。
可以使用选项 --netconvert-options 和 -polyconvert-options 为 netconvert 和 polyconvert 提供附加选项。
Note
默认情况下,osmBuild.py 使用推荐选项,但必须手动指定 netconvert-typemap。
请注意,这些脚本还支持辅助语法,用于通过将大面积区域拆分为多个图块和下载请求来加载更大的区域。在这种情况下,调用如下所示:
osmGet.py --bbox <BOUNDING_BOX> --prefix <NAME> --oldapi --tiles <INT>
osmBuild.py --oldapi-prefix <NAME --tiles <INT> [--vehicle-classes (all|road|passenger),ramps,tls] [--type-file <TYEPMAP_FILE>]
高程数据#
在网络中合并 z 坐标仍然是实验性的,因此请报告任何异常情况。
SRTM#
当使用选项 --osm.elevation 时,z 数据是从 OSM 节点中带有 key="ele" 的标签导入的。由于此标签尚未广泛使用,因此存在一些工具可以将 OSM 数据与高程数据源叠加(https://wiki.openstreetmap.org/wiki/Srtm_to_Nodes)。使用 osmosis-srtm 插件时,必须使用选项 tagName=ele,因为仅评估 'ele' 标签,而插件默认会使用 'height' 标签。
图层信息#
当使用选项 --osm.layer-elevation 时,z 数据是从 OSM 路径中带有 key="layer" 的标签导入的。由于此数据不编码完整的高程信息,因此使用启发式方法来解释给定的信息。可能需要手动校正。
其他数据源#
导入高程数据的其他选项列在高程概述页面。
其他说明#
交叉口(Junctions)#
在 OpenStreetMap 中,形成一条街道但被例如草坪或电车轨道隔开的道路,由两条彼此平行的边表示。当与另一条街道交叉时,它们形成两个交叉口而不是一个。要将此类交叉口合并为一个交叉口,可以定义要合并的节点。有关用法详情,请参见 Networks/Building Networks from own XML-descriptions#Joining Nodes 和 netconvert 文档。
netconvert 选项 --junctions.join 应用启发式方法自动合并这些交叉口簇,并且在使用上述 osmBuild.py 脚本时默认使用。但是,有些交叉口簇对于启发式方法来说过于复杂,应手动检查(如警告消息所示)。要手动指定这些交叉口的合并,请参见 JoiningNodes。此外,有时启发式方法会错误地合并一些交叉口。可以通过将它们作为列表提供给选项 --junctions.join-exclude <ID>[,<ID>]* 来排除这些交叉口。
如果让交叉口保持不合并,由于中间边很短以及难以计算交叉口簇的正确交通灯计划,存在吞吐量低、拥堵甚至死锁的高风险。
交通灯#
解释 OSM 中的交通灯信息#
netconvert 倾向于每个交叉口由一个带有单一交通灯控制器的节点表示。要实现前者,请参见 #Junctions。要实现后者,建议使用一些额外的选项。OSM 通常使用交叉口前方的节点来表示交通灯信号的位置。实际的交叉口本身则未标记为受控。 要解释这些结构,可以使用选项 --tls.guess-signals 和 --tls.guess-signals.dist <FLOAT>。 默认情况下,仅当所有入口方向都有上游信号(在 --tls.guess-signals.dist <FLOAT> 范围内,默认为 25)时,交叉口才被解释为受交通灯控制。 设置选项 --tls.guess-signals.slack <INT> 可能会有所帮助,它允许 <INT> 个入口方向没有信号(例如来自服务道路)。 为了在网络中识别猜测的信号,它们都在节点 ID 前加上前缀 GS_。
为了涵盖此启发式方法失败的情况,可以使用以下选项为多个节点计算联合交通灯计划。
合并交通灯#
OSM 无法将多个节点分配给一个交通灯。这意味着在导入网络后,通常由一个交通灯系统控制的附近节点将由两个控制。显然,如果两个交通灯不同步,这些区域的交通将崩溃。通过将附近的交叉口合并为一个交叉口通常可以更好地表示现实情况。但是,如果交叉口应保持分离,则可以通过设置选项 --tls.join 来生成联合控制器。对于联合交通灯的微调,可以为各个节点自定义属性 tl。合并的交通灯的 ID 为 joinedS_id0_id1,其中 id0 和 id1 是交叉口 ID。如果合并中的节点超过 --max-join-ids(默认为 4)给出的数量,ID 将被缩写为类似 joinedS_id0_id1_id2_id3_#5more(对于 9 个节点簇)。
如果您想让 netconvert 猜测先前未合并的节点簇(例如使用 --junctions.join)且输入中未分配交通灯的联合交通灯,可以使用选项 --tls.guess.joining。通常不建议这样做。通过此方法合并的交通灯的 ID 为 joinedG_id0_id1,其中 id0 和 id1 是交叉口 ID,并应用与上述相同的缩写规则。
调试缺失的交通灯#
有时,应受 TLS 控制的交叉口在导出的 .net.xml 文件中被设置为不受控。这可能是由于 OSM 中数据不足,或 netconvert 对该数据的解释无效所致。以下任一步骤可能有助于诊断问题:
- 运行 netconvert 不带 选项 --tls.discard-loaded --tls.discard-simple
- 使用包含
<polygonType id="highway" name="highway"的类型文件运行 polyconvert,然后在 sumo-gui 中查看生成的 POI。它们应包含 OSM 文件中定义的所有交通灯位置。
覆盖交通灯信息#
如果 OSM 文件中嵌入的交通灯信息不符合您的需求,您可以使用 netconvert 中的 --osm.discard-tls 选项将其剥离,然后在第二次运行 netconvert 时在单独的 *.nod.xml 文件中提供您自己的定义:
# 1. 导入 OSM 文件到 SUMO,丢弃 TLS 信息。
netconvert --osm-files berlin.osm.xml --output-file berlin-without-tls.net.xml \
--osm.discard-tls
# 2. 设置交通灯信息。
netconvert --sumo-net-file berlin-without-tls.net.xml --node-files tls-controlled-nodes.nod.xml \
--output-file berlin-with-tls.net.xml
其中 tls-controlled-nodes.nod.xml 将节点的类型覆盖为 "traffic_light"。如果节点已存在(通常情况),则除了节点的 ID 和新的节点类型外,无需提供任何其他信息。
高速公路匝道#
OSM 网络通常缺少高速公路匝道的附加车道。可以使用 netconvert 的 --guess-ramps 选项来猜测这些车道。
孤立的边#
在处理严格的车辆场景时,通常添加以下选项会有所帮助:
--remove-edges.isolated
以丢弃没有前驱和后继边的边。但是,这通常会导致移除铁路或水道,这对于多模式场景是不可取的。
电车和道路车辆的共享空间#
在 OSM 数据库中,电车和道路车辆的共享空间通常用占据相同空间的不同元素建模。直接导入时,这将允许这些交通模式忽略彼此,因为它们运行在不同的边上。 要解决此问题,可以使用选项 --edges.join-tram-dist FLOAT。设置此选项时(建议值在 1 到 2 之间),重叠的 OSM 元素将转换为具有共享权限的道路车道(在 sumo-gui 中以深紫色表示)。
其他路径/边属性#
当设置选项 --output.street-names 时,每条边的 'name' 属性将设置为 OSM 数据中定义的街道名称。
当设置选项 --osm.all-attributes 时,路径的所有 OSM 标签都将作为边的通用参数导出。 如果只想导入特定的标签选择,可以使用选项 --osm.extra-attributes 进行设置。
铁路信号#
默认情况下,导入类别为 "main" 和 "combined" 的铁路信号。如果感兴趣区域未提供必要的详细程度,则可以使用选项 --osm.railsignals 自定义导入规则。支持以下值:
- ALL: 导入所有信号(key="railway" 和 value="signal")
- KEY=VALUE: 导入所有带有 key 为 "railway:signal:KEY" 且 value 为 VALUE 的标签的节点
- KEY=VALUE,KEY2=VALUE2,...: 如上所述,支持多种组合
- KEY=: 导入所有带有 key 为 "railway:signal:KEY" 的标签的节点(也支持给出列表)
- DEFAULT: 等同于选项值 "main=,combined="
编辑 OSM 网络#
JOSM#
摘自 George Dita,2009.07.01 JOSM 可用于编辑 OSM 数据(例如,修剪矩形地图和删除不需要的要素)。删除不感兴趣的部分后,必须使用 xmlstarlet 更改文件,这实际上会删除节点。
xmlstarlet 可以这样使用:
xmlstarlet ed -d "/osm/*[@action='delete']" < input.osm > output.osm
Caution
在 JOSM 版本 4279 之前,由 JOSM 创建或修改的节点和路径被分配负 ID。每次运行 JOSM 时,这些 ID 都会重新计算。请不要在您的 SUMO 文件中依赖它们。如果您决定不将更改上传到 OpenStreetMap,可以删除 ID 中的减号,确保 ID 唯一,然后可以在 SUMO 文件中安全地引用它们。
OSMOSIS#
摘自 Christian Klotz,2009.07.01,由 Christoph Sommer 提示
Java 工具 osmosis (https://wiki.openstreetmap.org/index.php/Osmosis) 可用于从 OSM 文件中过滤掉不需要的要素。以下命令保留高速公路和高速公路链接,同时过滤掉其他所有内容:
java -jar osmosis.jar --read-xml file="orginal.osm.xml" --way-key-value \
keyValueList="highway.motorway,highway.motorway_link" \
--used-node --write-xml file="filtered.osm.xml"
osmfilter / osmconvert#
osmfilter 是一个命令行工具,用于过滤 OpenStreetMap 数据文件。 它可以用来预处理数据,并为 netconvert 节省大量工作。 使用此工具,可以在几分钟的处理时间内导入整个国家的顶级道路。 建议使用关联的工具 osmconvert 将数据转换为 '.o5m' 格式并转换回来,以加快处理大型数据集的速度。这些工具也可用于将 osm 文件裁剪到边界框,如下所示(注意坐标顺序是 lon,lat):
osmconvert -b=10.54,52.257,10.545,52.26 fullnet.osm.xml > myplace.osm.xml
netconvert 详情#
道路类型#
导入道路网络时,netconvert 会搜索街道类型,该类型在 OSM 中编码为键/值对,其中键是 "highway"、"railway" 或 "waterway"。仅当此类键出现在边定义中时,才会导入该边(另见下文)。边的类型名称由找到的键/值对构建,名称为:<KEY>.<VALUE>。使用此类型名称,边的属性将使用预定义的类型名称到类型定义的映射来确定。可以使用自己的类型定义覆盖默认类型。这在关于 SUMO 边类型文件 的文章中有记录。
如果未给出显式类型文件,则使用位于 <SUMO_HOME>/data/typemap/osmNetconvert.typ.xml 的默认文件。如果您想更改值以添加行人基础设施或具有双向铁路边,您可能需要从 <SUMO_HOME>/data/typemap/ 加载附加类型映射。
Caution
这些类型映射中的值是临时设置的,尚未经过验证。如果有人能重新审视并改进它们,将对我们有很大帮助。请告诉我们。
显式道路属性#
如果边包含车道数量(键="lanes")或允许速度(键="maxspeed")的定义,则使用此信息而不是相应类型的值。此外,读取每边的信息,即边是否为单向边(键="oneway")。如果边属于环形交叉口(键="junction" 且值="roundabout"),它也会被设置为单向边。
丢弃不需要的交通模式#
在大多数情况下,机动交通无法穿越的轨道和边对于道路交通研究来说并不重要。可以使用 netconvert 选项 --remove-edges.by-vclass <STRING>[,<STRING>]* 将这些边排除在导入之外。
要移除所有不能被乘用车使用的边,调用必须扩展为:
--remove-edges.by-vclass hov,taxi,bus,delivery,transport,lightrail,cityrail, \
rail_slow,rail_fast,motorcycle,bicycle,pedestrian
要移除所有不能被道路车辆使用的边,调用必须扩展为:
--remove-edges.by-vclass rail_slow,rail_fast,bicycle,pedestrian
OSM ID 和 SUMO ID 之间的关系#
在大多数情况下,OSM 和 .net.xml 之间的关系很简单:
- OSM 节点 ID "1234" 转换为交叉口 ID "1234"。
- OSM 路径 ID "5677" 转换为多个边 ID "5678#0"、"5678#1"、"5678#2"、"-5678#0"、"-5678#1"、"-5678#2"
OSM 路径大多是双向的,并且穿过多个交叉口。在 .net.xml 中,它们在每个交叉口处被拆分,带有运行索引 #n,带有前缀 '-' 的边是相反方向的边。
通过设置选项 --output.original-names,网络中的每条车道将在子元素中记录其源自输入网络的元素名称:
<param key="origID" value="...."/>
某些 OSM 元素可能不会出现在创建的网络中,因为它们与其他元素合并或转换为沿边的(未命名)几何点(由于选项 --geometry-remove)。 因此,一系列没有交叉口的路径(例如 "42"、"43"、"57")将使用第一条路径的 ID ("42") 合并为单个 SUMO 边。
此外,选项 --junctions.join 可能导致移除某些路径和节点。多个节点("1"、"2")被合并为 "cluster_1_2",簇内的边被转换为名为 ":cluster_1_2_INDEX" 的内部边。
导入期间的警告#
在 OSM 导入期间可能会发出几种不同类型和严重程度的警告和错误。
| 消息 | 解释 | 推荐操作 |
|---|---|---|
| Warning: Discarding unusable type ... / Discarding unknown compound ... in type ... | 列出类型文件中未提及的 <way> 类型 |
在大多数情况下可以安全忽略(除非用户编辑了类型文件) |
| Warning: The referenced geometry information (ref='...') is not known | 导入期间未知的 osm 节点引用。 | 在大多数情况下可以安全忽略(除非用户编辑了 OSM 文件) |
| Warning: Discarding way '...' because it has only 1 node(s) | OSM 文件中的数据不完整(通常在数据集的边界处)。 | 在大多数情况下可以安全忽略(除非用户编辑了 OSM 文件) |
| Warning: Discarding unusable type "...." (first occurrence for edge "....") | 未知的边类型在导入期间被忽略。 | 忽略或提供包含该类型的边类型文件。 |
| Warning: Ignoring restriction relation ... | OSM 文件中缺少某些数据。 | 忽略,因为此关系很可能超出道路网络的边界。 |
| Warning: Direction of restriction relation could not be determined | OSM 文件中缺少某些数据。 | 忽略,因为此关系很可能超出道路网络的边界。 |
导入大型网络#
可以为非常大的区域(例如整个苏格兰)构建 SUMO 网络,但应采取一些预防措施:
- 使用以下选项减小网络大小
--no-internal-links, --keep-edges.by-vclass passenger,
--remove-edges.by-type highway.track,highway.services,highway.unsurfaced
- 如果只需要主要道路,可以通过设置选项进一步减小网络
--keep-edges.by-type
highway.motorway,highway.motorway_link,highway.trunk,highway.trunk_link,highway.primary,highway.primary_link
- 如果您的网络大于 ~500MB,请确保使用 sumo 的 64 位版本,并使用具有大量 RAM 的计算机
导入公共交通数据#
netconvert 和其他 SUMO 工具可用于从 OSM 导入公共交通数据。最简单的方法是使用 OSM-Web-Wizard 工具。在没有向导的情况下执行导入在 Tutorials/PT_from_OpenStreetMap 中有说明。
导入以下数据:
- 公共交通站点
- 为这些站点服务的公共交通线路
利用上述数据所需的公共交通时刻表是基于线路的仿真,由用户定义的服务周期生成。
导入人行道#
默认情况下(osmNetconvert.typ.xml),仅会为行人构建专用边,所有其他道路(高速公路除外)将允许行人在所有车道上通行。 对于行人仿真,需要人行道,并且行人应被禁止在大多数道路车道上通行。
OSM 数据覆盖范围和人行道的定义风格因地区而异,可能需要不同的导入选项才能实现足够的人行道覆盖。
来自类型映射的人行道#
通过添加类型映射,例如 {{ SUMO_HOME }}/data/osmNetconvertPedestrians.typ.xml,特定道路类型将添加预配置宽度的人行道,并且所有非人行道车道禁止行人通行。
仅当 OSM 数据显式禁用边上的人行道时,才会考虑 OSM 人行道数据。 这确保了良好的人行道覆盖,但如果 OSM 建模者将“人行道”添加为平行的人行道路边,则可能导致双人行道。
来自 OSM 的人行道#
通过设置选项 --osm.sidewalks,将加载 OSM 中的所有人行道数据。当与类型映射(如 {{ SUMO_HOME }}/data/osmNetconvertPedestrians.typ.xml)结合使用时,类型映射将仅用于配置人行道宽度,不会添加额外的人行道。
当设置 --osm.sidewalks 时,通过设置选项 --osm.crossings,将加载 "highway=crossing" 标签并生成人行横道。
这种定义风格可以防止双人行道,但可能导致 OSM 建模者未添加人行道信息的地方缺少人行道。
osmWebWizard 从 1.11.0 版本开始使用此风格。
通过 Python/ Overpass API 导入 OSM 数据#
获取 OSM 数据的另一种方法是通过 Overpass API 进行查询,例如使用 python。
Python 示例(从 OSM 中的 BBox 获取 OSM 河流数据)
import requests
import json
def getData(southern-most latitude, western-most longitude, northern-most latitude, eastern-most longitude):
query = 'way["waterway"="river"]["ship"="yes"](bbox:%s, %s, %s, %s)' %(southern-most latitude, western-most longitude, northern-most latitude, eastern-most longitude)
overpass_url = "https://overpass-api.de/api/interpreter"
overpass_query = """
[out:json][timeout:25];
(
"""+query+""";
);
out body;
>;
out skel qt;
"""
response = requests.get(overpass_url, params={'data': overpass_query})
data = response.json()
return data, query
注意:如果数据量过大,overpass API 会中止。
有关查询语法的更多信息以及用于测试查询的 GUI 可以在网站 https://overpass-turbo.eu/ 上找到。
导入其他格式(pbf, o5m)#
要在 SUMO 中使用 pbf 或 Osmconvert 网络,首先需要将其转换为 OSM 格式。这可以使用 Osmconvert 完成。
缺失的描述#
- TLS 计算
- 车道到车道连接的计算
- 确切导入的内容(如何确定边属性)
- 其他交通模式
- 网络质量
参考文献#
- https://www.openstreetmap.org/ - 主页
- https://www.openstreetmap.de/ - 德国主页
- https://wiki.openstreetmap.org/wiki/Map_features - 有关数据库属性的信息
