从 OpenStreetMap 导入

OpenStreetMapOverview.svg

步骤概述:制作地图,编译边类型文件,并生成 SUMO 网络文件。

OpenStreetMap 是获取真实世界地图数据的宝贵来源。本教程将向您展示:

  1. 如何准备 OpenStreetMap 地图以用于交通仿真,以及
  2. 如何将此地图导入 SUMO。

您可能还会发现以下页面很有用:

准备 OpenStreetMap 地图#

eichstaett.osm.png

在此步骤中创建 OpenStreetMap 文件。图片显示了在 JOSM 中打开的德国城市 Eichstätt。

本教程的第一步是获取车辆可以行驶的地图。如果您不想执行此步骤,可以使用 Tutorials/OSMActivityGen/eichstaett.osm。该文件已根据本教程准备好了。

要从 OpenStreetMap 获取详细信息,您可以使用网站的导出功能或程序 JOSM。两者都可以将对象的选择(通常给定为矩形范围)保存到文件中:即 OpenStreetMap 文件。您可以简单地将此文件用作 SUMO 交通仿真的地图。

然而,OpenStreetMap 中的数据通常并未完全准备好用于交通仿真。为了获得良好的仿真效果,通常需要增强地图。建议执行以下步骤:

  1. 直接在 OpenStreetMap 中完善地图。遵循 OpenStreetMap wikiMap Making 区域的指南。它们提供了关于使用什么软件以及如何编码地图所有属性的宝贵提示。您应确保地图包含与交通仿真相关的所有数据。(在此阶段,仅填写其他人可以很好理解的正确数据。不要仅仅为了您的仿真而调整地图——这将在下面进行。) 对于给定的 Eichstätt 城市示例,我发现大多数街道已经在地图中——它们足以满足我的仿真需求。因此,我只查看了 OpenStreetMap 中街道的标签(属性描述),并没有添加新街道。我带着装有 OpenStreetMap 编辑器 JOSM 的笔记本电脑,开车穿过城市并更正了以下属性:
    • 街道的类型(重要性)由 highway 标签定义。此属性帮助 SUMO 确定隐含的速度限制和路权规则。
    • 所有速度限制与隐含规定限制(即交通标志设定的速度限制)不同的街道都应具有 maxspeed 标签。正确的速度限制有助于 SUMO 在道路网络中找到合理的路线。
    • 单行道通常对交通流有显著影响。它们可以在 OpenStreetMap 中用键值对 oneway=yes 标记。
    • 正确的车道数量有助于避免仿真中出现不切实际的交通拥堵。lanes 标签指定了街道的总车道数,即两个方向的总和。因此,您无法在 OpenStreetMap 中描述各种复杂的车道配置(例如一个方向两条车道,另一条用于右转,还有一条用于相反方向)。它们只能直接在 SUMO 网络文件 或其对应的 SUMO XML 描述文件 中定义。此类车道配置超出了本教程的范围。
    • 在 OpenStreetMap 中,交通信号灯是标记为键值对 highway=traffic_signals 的节点。每个交通信号灯都是独立的;您无法将大型交叉口的几个相互依赖的交通信号灯关联起来。同样,SUMO 网络文件 可以包含这种复杂的逻辑,当您使用选项 --try-join-tls 时,netconvert 会尝试检测此类相互依赖的交通信号灯(请参见下面的 #将地图转换为 SUMO 网络格式 部分)。
    • 最后,查看 JOSM 的警告。大多数警告不会影响您的工作,但其中一些可以帮助您发现地图中的重大错误(例如未连接的街道)。 在此步骤中,请定期将您的修改上传到 OpenStreetMap,以避免与其他编辑者的修改发生冲突。
  2. 现在 OpenStreetMap 中的地图应该具备了用于仿真的必要质量。接下来,您应确定所需的地图详细程度,并将其导出为 OpenStreetMap 文件。请注意,从现在开始切勿将地图上传回 OpenStreetMap。
  3. 最后,您可以根据特定目的增强地图:在 JOSM 中打开 OpenStreetMap 文件。找到街道应结束的正确节点,并删除不必要的对象(超出所需详细程度的对象)。Networks/Import/OpenStreetMap#Editing OSM networks 部分描述了清理 OSM 文件的更多方法。但实际上,大部分清理工作都是由 netconvert 完成的(请参见下面的 #将地图转换为 SUMO 网络格式 部分)。 您可以根据目的调整地图,例如添加或删除道路、更改其类型等。

现在您已经拥有了用于仿真的良好地图,格式为 OpenStreetMap 文件。顶部的图片显示了我为交通仿真准备的 Eichstätt 城市地图。您可以 下载地图 (eichstaett.osm) 来跟随本教程。

虽然 OpenStreetMap 格式是描述地图的广泛使用的格式,但 SUMO 有自己的格式:SUMO 网络格式。因此,您必须首先将 OpenStreetMap 文件转换为 SUMO 网络文件。接下来的两个步骤将指导您完成转换过程。

配置地图的隐含属性#

OpenStreetMap 文件 中,highway 属性隐含地决定了其他一些属性的值,例如速度限制。您必须在 SUMO 边类型文件 中告诉 SUMO 这些隐含值。它根据 highway 类型为道路属性速度限制、车道数量、优先级、单行道和允许的车辆类别分配默认值。文章 SUMO 边类型文件 提供了几个预定义的 SUMO 边类型文件,并解释了如何编译您自己的边类型文件。

在本教程的此步骤中,确定 OpenStreetMap 社区定义的每个 highway 类型的隐含值。SUMO 包含几个适用于 OpenStreetMap 的边类型文件,其中一些旨在组合使用。

对于本教程,使用了类型文件 <SUMO_HOME>/data/typemap/osmNetconvert.typ.xml<SUMO_HOME>/data/typemap/osmNetconvertUrbanDe.typ.xml。如果您想修改它们,请复制到您的本地目录。

将地图转换为 SUMO 网络#

您现在可以创建 SUMO 网络文件。最基本的选项是 OSM 文件和输出文件的名称。导入 OSM 数据到 SUMO 时,建议使用更多选项

    netconvert --xml-type-files osmNetconvert.typ.xml,osmNetconvertUrbanDe.typ.xml \
     --osm-files eichstaett.osm --output-file eichstaett.net.xml \
     --geometry.remove --roundabouts.guess --ramps.guess \
     --junctions.join --tls.guess-signals --tls.discard-simple --tls.join

netconvert 从 OpenStreetMap 文件中提取与仿真相关的信息(请参见上面 Tutorials/OSMActivityGen/eichstaett.osm 的图片),并将其输出到 SUMO 网络文件中(请参见下面 Tutorials/OSMActivityGen/eichstaett.net.xml 的图片)。在此过程中,它会添加一些关于交通信号灯以及交叉口车道之间连接的假设。您可以在 netconvertNetworks/Import/OpenStreetMapSUMO Road Networks 中阅读有关此过程的更多信息。

eichstaett.net.png

存储在文件 eichstaett.net.xml 中的地图。在此地图中,SUMO 运行其仿真。将其与源文件(上面图片中显示的 OpenStreetMap 文件)进行比较。

netconvert 的更多选项对于 OpenStreetMap 导入非常有用:

  • --remove-edges.by-vclass / --keep-edges.by-vclass

    在 SUMO 边类型文件中,您可以丢弃特定类型的道路。此外,SUMO 可以丢弃仅限于特定车辆类别的道路。这些类别通过此选项给出。在 SUMO 边类型文件 中,您可以找到 SUMO 车辆类别的列表。减少不必要的道路(例如人行道)使得处理网络更容易。要获得仅用于乘客交通仿真的网络,可以使用选项 --keep-edges.by-vclass passenger

  • --keep-edges.components

    仅保留网络中 <INT> 个最大的连通分量(通常只需要 1 个)。警告:这可能会移除您想要保留的铁路或其他边。因此请检查 netconvert 的消息。

  • --verbose

    打印额外的输出。

现在请仔细阅读 netconvert 打印出的消息。尝试理解任何警告——它们可以为您提供关于如何改进 OpenStreetMap 文件以使其适合转换的提示。返回 JOSM 中的 OpenStreetMap 文件以修复错误或调整地图以进行转换。例如,我通过此过程发现了未连接的道路。我还稍微移动了一些交叉口,因为如果两个交叉口靠得太近,netconvert 会遇到问题。但最终,我成功地将 OpenStreetMap 文件转换为 SUMO 网络文件,没有任何警告。(当然,我上面提供的 OpenStreetMap 文件 eichstaett.osm 已经是改进后的版本。)

恭喜!当您执行完所有这些步骤后,您就拥有了一个适合使用 SUMO 进行交通仿真的地图。 它采用 SUMO 网络格式。本教程示例的地图位于文件 Tutorials/OSMActivityGen/eichstaett.net.xml 中。在右上方,您可以看到一个可视化该文件的图像。我使用程序 sumo-gui 打开了 eichstaett.net.xml 并截取了屏幕截图。

当您回顾到目前为止所做的工作时,大部分工作都是为了完善 OpenStreetMap 数据以用于交通仿真并添加缺失的信息。 获取良好的地图很困难,但对于交通仿真非常重要。