我正在创建一个移动应用程序,用于确定某人是否是一名好司机。手机放置在仪表盘上,在用户驾驶时收集GPS信息。我需要确定一种方法来检测司机是否遵守限速,并且我想通过OpenStreetMap来实现这一点。怎样从OpenStreetMap获取速度限制是最好的方法?
我正在创建一个移动应用程序,用于确定某人是否是一名好司机。手机放置在仪表盘上,在用户驾驶时收集GPS信息。我需要确定一种方法来检测司机是否遵守限速,并且我想通过OpenStreetMap来实现这一点。怎样从OpenStreetMap获取速度限制是最好的方法?
您可以发出一个网络请求来获得您的答案。
以下是其中一个小框(将其作为浏览器URL尝试)中应该出现的内容:
You can make a Web request to get your answer.
Here is one (try it as a browser URL) of a small box where you're supposed to be:
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是你的答案。如果没有最高限速,则默认适用于highway=secondary(或=motorway…)
所有标签都在wiki.openstreetmap.org上描述。
这是使用xapi。您也可以使用overpass api。
速度限制覆盖范围是部分的,但您可以改进它。
在主地图上留下笔记以提供数据。
对于任何想寻找一个能够使用XML和json的好的现代替代品的人来说,HERE Maps是一个隐藏的宝石,绝对值得一试。有一个免费计划,可以提供大约100,000个请求,API也非常稳定且易于使用。
https://developer.here.com/myapps/create-with-plan/10134035/10134084
创建一个账户,创建您的应用程序,将您的纬度和经度应用到类似下面的 API 中。按照他们的文档获取限速示例请求。我与HERE Maps没有任何关联,只是一个寻找好的速度限制解决方案的开发者!
如果您使用此解决方案,则此答案也可能有用。
在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>