OpenStreetMapDownload

来自 https://www.openstreetmap.org/

OpenStreetMap 是一个免费、可编辑的 全世界地图。它是由像你一样的人们制作的。”

OpenStreetMap 创建并提供 免费的地理数据(例如街道地图)给任何需要它们的人。该项目之所以启动, 是因为大多数你认为免费的地图实际上在法律或技术上对其使用有限制, 阻碍了人们以创造性、生产性或意想不到的方式使用它们。”

OpenStreetMap 所包含的数据量及其质量确实令人惊叹。 尽管没有需求数据可用,但其道路网络的质量使得将 OpenStreetMap 视为交通仿真的数据源是值得的, 特别是当对多模式或跨模式仿真感兴趣时。

本页描述了如何获取 OpenStreetMap 数据。OSM 数据必须经过转换才能在 Sumo 中使用(参见 Networks/Import/OpenStreetMap)。 页面 OpenStreetMap file 提供了关于数据格式的进一步通用信息。

下载小矩形区域#

使用 osmWebWizard#

可以通过在浏览器中选择区域来下载数据。除了下载和构建网络外,还可以自动生成各种交通模式的需求。

直接从浏览器下载#

可以通过在 https://www.openstreetmap.org/export 选择矩形区域来方便地下载数据。 但是,此页面限制了可以下载的数据量。根据所选区域的数据密度,这可能会将可下载区域限制在不到一平方公里(尽管下载整个城市可能是可能的)。

使用 Java OpenStreetMap Editor (JOSM)#

Java OpenStreetMap Editor (JOSM) 是一个成熟的处理 OSM 数据的工具。 它允许使用交互式地图舒适地下载矩形区域。它甚至支持按名称(例如柏林)搜索区域。它还支持 OSM 数据的过滤和编辑。

使用 OpenStreetMap API 下载较大的矩形区域#

可以使用 Web 浏览器或更好的是使用诸如 wget 之类的程序下载较大量的 OSM 数据。 有关详细信息,请参阅 API 概述

通过 API 下载 OSM 数据是一个两步过程:首先,你必须确定你所在区域的地理坐标。然后,你可以使用这些坐标下载 OSM 数据。

获取地理坐标#

你需要所选区域西南角和东北角的(经度,纬度)数字。你可以通过将鼠标指向适当的地图位置并观察状态栏中的坐标,在此页面 获取它们。柏林市中心位于以下坐标内:

SW-corner: 13.278 52.473
NE-corner: 13.471 52.552

下载该区域#

根据地理坐标构造一个 URI(网络地址),并从该 URI 下载数据。URI 采用以下形式:

https://api.openstreetmap.org/api/0.6/map?bbox=<SW-longitude,SW-latitude,NE-longitude,NE-latitude>

对于上面的例子,这变成:

https://api.openstreetmap.org/api/0.6/map?bbox=13.278,52.473,13.471,52.552

你可以通过在 Web 浏览器中输入 URI 或使用其他程序(如 wget)来下载你的数据。

wget.exe "https://api.openstreetmap.org/api/0.6/map?bbox=13.278,52.473,13.471,52.552" -O berlin.osm.xml

重要提示: API 版本号 0.6 最终会过时。请参考 openstreetmap API 页面 获取最新版本。

下载城市#

对单个城市建模是常见的仿真用例。OSM Overpass API 提供了一个舒适的接口,用于获取城市边界(或其他行政区域)内的道路网络和基础设施。

这是一个两步过程:首先,你必须获取要下载区域的 Id(标识号)。然后,你可以使用该 Id 下载该区域。

获取区域 Id#

将以下查询复制到 OSM Overpass API 查询页面 的输入框中。将 Berlin 替换为你选择的城市名称,然后单击随附的 "Explore" 按钮。

 <query type="relation">
 <has-kv k="boundary" v="administrative"/>
 <has-kv k="name" v="Berlin"/>
 </query>
 <print mode="body"/>

这将提示你下载或打开一个包含查询结果的文件。

 <relation id="62422">
   <member type="way" ref="36991886" role="outer"/>
   ...
   <member type="way" ref="44020341" role="outer"/>
   <tag k="de:amtlicher_gemeindeschluessel" v="11"/>
   <tag k="TMC:cid_58:tabcd_1:LocationCode" v="266"/>
   <tag k="type" v="multipolygon"/>
   <tag k="boundary" v="administrative"/>
   <tag k="admin_level" v="4"/>
   <tag k="TMC:cid_58:tabcd_1:Class" v="Area"/>
   <tag k="name" v="Berlin"/>
   <tag k="source" v="https://wiki.openstreetmap.org/wiki/Import/Catalogue/Kreisgrenzen_Deutschland_2005"/>
   <tag k="TMC:cid_58:tabcd_1:LCLversion" v="9.00"/>
 </relation>
 <relation id="119876">
   <member type="way" ref="33628254" role="outer"/>
   <tag k="tiger:PLACEFP" v="07304"/>
   <tag k="tiger:PLACENS" v="02403860"/>
   <tag k="tiger:PLCIDFP" v="1307304"/>
   <tag k="wikipedia" v="Berlin,_Georgia"/>
   <tag k="type" v="multipolygon"/>
   <tag k="place" v="city"/>
   <tag k="boundary" v="administrative"/>
   <tag k="admin_level" v="8"/>
   <tag k="name" v="Berlin"/>
   <tag k="border_type" v="city"/>
   <tag k="created_by" v="polyshp2osm-multipoly"/>
   <tag k="source" v="TIGER/Line® 2008 Place Shapefiles (https://www.census.gov/geo/www/tiger/)"/>
   <tag k="tiger:reviewed" v="no"/>
   <tag k="is_in:country" v="USA"/>
   ...
 </relation>

结果数据的重要部分是 <relation id="..."> 元素。此 id 属性将用于下载你所选城市的 OSM 数据。

重要提示: 如上面的 Berlin 查询所示,可能会有多个结果。通常,随附的标签足以区分 Berlin,GermanyBerlin,USA/Georgia。如果输出不包含你正在寻找的区域,添加区域类型可能会有帮助,例如 Berlin, city。如果问题仍然存在,请继续阅读 OSM Overpass API 网站。

按 Id 下载区域#

上一步为 Berlin 市获取的 Id 是 62422。从技术上讲,这只是柏林边界的 Id,我们必须加上数字 3,600,000,000 才能获得柏林区域的 Id。 3,600,000,000 + 62,422 = 3,600,062,422

使用这个数字,我们在 OSM Overpass API 查询页面 的输入框中构造另一个查询。

 <osm-script timeout="180" element-limit="20000000">
 <union>
   <area-query ref="3600062422"/>
   <recurse type="node-relation" into="rels"/>
   <recurse type="node-way"/>
   <recurse type="way-relation"/>
 </union>
 <union>
   <item/>
   <recurse type="way-node"/>
 </union>
 <print mode="body"/>
 </osm-script>

<area-query ref="..."> 中的数字替换为上面的数字,然后单击随附的 "Download" 按钮。这将提示你下载或打开一个包含你城市 OSM 数据的文件。

重要提示: 对于大城市,你可能需要调整 timeoutelement-limit 的值。

下载非常大的区域#

预打包区域#

大量预打包区域可在 https://www.geofabrik.de/data/download.html 获取。其中许多区域相当大,在合理处理之前可能需要过滤。使用 [netconvert] 导入整个德国需要大约 60GB 的 RAM!

自定义区域#

OpenStreetMap-API 仍然限制了可提取区域的大小。位于 <SUMO_HOME>/tools 中的帮助脚本 osmGet.py 允许通过拆分请求来提取更大的区域。调用方式为:

osmGet.py <PREFIX> <BOUNDING_BOX> <TILES_NUMBER>

边界框必须以 <LAT_MIN>,<LONG_MIN>,<LAT_MAX>,<LONG_MAX> 的形式给出。

Note

"wget" 必须已安装并位于执行路径中。

此脚本将 OSM 数据提取为 n 个文件,其中 n =<TILES_NUMBER>,命名为 "<PREFIX><INDEX>_<TILES_NUMBER>.osm.xml"。这些文件可以通过同样位于 <SUMO_HOME>/tools 中的脚本 osmBuild.Py 导入。这在 Networks/Import/OpenStreetMap#Import Scripts 中有描述。