I'm creating a mobile app that determines if someone if a good driver. The phone sits on the dashboard and collects GPS information while the user is driving. I need to determine a way if the driver is following the speed limit, and I would like to do this via OpenStreetMap. What is the best way to get speed limits from OpenStreetMap?
3 回答
您可以通过 Web 请求获得答案。
这是您应该在的一个小盒子中的一个(尝试将其作为浏览器 URL):
www.overpass-api.de/api/xapi?*[maxspeed=*][bbox=5.6283473,50.5348043,5.6285261,50.534884]
答案显示穿过它的街道,在一所学校前面:
<node id="1312239864" lat="50.5348877" lon="5.6286790">
<tag k="highway" v="crossing"/>
<tag k="traffic_calming" v="bump"/>
</node>
<node id="2025084665" lat="50.5345623" lon="5.6274183">
<tag k="traffic_calming" v="choker"/>
</node>
...
<way id="191950462">
<nd ref="2025084669"/>
...
<tag k="bicycle" v="yes"/>
<tag k="highway" v="secondary"/>
<tag k="maxspeed" v="30"/>
<tag k="name" v="Rue d'Esneux"/>
<tag k="source:maxspeed" v="school zone"/>
</way>
我只留下了有趣的东西,最不言自明。例如,他们自己的节点上的交通平静功能。
街道是由节点和它自己的标签组成的方式。
maxspeed=30 是你的答案。如果没有 maxspeed,则默认适用于 Highway=secondary(或 =motorway ...)。
所有标签都在 wiki.openstreetmap.org 中进行了描述,
这是使用xapi。您也可以使用overpass api。
限速覆盖范围是部分的,但您可以改进它。在主地图上留下注释以提供数据。
对于任何寻找可以同时使用 XML 和 json 的现代替代方案的人来说,HERE Maps ishidden gem 绝对值得一试,有一个免费计划提供大约 100,000 个请求,API 也坚如磐石且易于使用。
https://developer.here.com/myapps/create-with-plan/10134035/10134084
创建一个帐户,创建您的应用程序,将您的 lat lot 应用到类似于下面的 API。
根据他们的文档获取限速示例请求
我与 HERE Maps 没有任何关系,只是一个正在寻找好的限速解决方案的开发人员!
PS如果你确实使用这个解决方案,那么这个答案也可能有用。
OpenStreetMap 数据(链接)中有一个maxspeed
用于道路和水路的标签。OSM 数据本身有多种格式。最容易上手的是人类可读的 XML 格式,可以直接从OpenStreetMap.org导出。下面是伦敦 The Strand 的示例条目,显示了数据格式以及如何表达 maxspeed。
<way id="157541665" version="1" timestamp="2012-04-05T22:32:48Z" changeset="1"/>
<nd ref="1697772135"/>
<nd ref="33141175"/>
<nd ref="321255915"/>
<nd ref="282569730"/>
<tag k="highway" v="primary"/>
<tag k="lanes" v="3"/>
<tag k="maxspeed" v="30 mph"/>
<tag k="name" v="Strand"/>
<tag k="postal_code" v="EC4"/>
</way>