我正在尝试获取特定坐标周围位置的速度限制。
OSM Query: www.overpass-api.de/api/xapi?*[maxspeed=*][bbox=5.6283473,50.5348043,5.6285261,50.534884]
回应:
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">
<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
<meta osm_base="2015-06-09T07:04:02Z"/>
<node id="21265775" lat="50.5350159" lon="5.6293520"/>
<node id="21265776" lat="50.5346804" lon="5.6276238"/>
<node id="1312239857" lat="50.5347491" lon="5.6278274"/>
<node id="1312239864" lat="50.5348877" lon="5.6286790">
<tag k="highway" v="crossing"/>
<tag k="traffic_calming" v="table"/>
</node>
<node id="2025084669" lat="50.5353414" lon="5.6303289">
<tag k="highway" v="traffic_calming"/>
<tag k="traffic_calming" v="choker"/>
</node>
<node id="3362188585" lat="50.5345623" lon="5.6274183">
<tag k="highway" v="traffic_calming"/>
<tag k="traffic_calming" v="choker"/>
</node>
<way id="191950462">
<nd ref="2025084669"/>
<nd ref="21265775"/>
<nd ref="1312239864"/>
<nd ref="1312239857"/>
<nd ref="21265776"/>
<nd ref="3362188585"/>
<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>
</osm>
这是在边界框的情况下(bbox:我猜这些是角坐标或API根据提供的坐标制作框或多边形)。但问题是,我只有一个坐标而另一个问题是,我在响应中看到maxspeed = 30。但是不确定我应该编写什么样的代码来解析这个响应,因为响应格式可能会改变。我正在使用客观的C平台来解析这个响应。
答案 0 :(得分:1)
回复的格式是常规XML。要了解它,您应该阅读OSM的elements。
您的回复包含一个way和多个nodes以及tags。但是在查询不同的边界框时,它可能包含多种方式。
这种方式有maxspeed tag,你似乎对此感兴趣。几何体的方式由其节点定义。该方法通过<nd ref="<node ID>"/>
引用六个不同的节点。每个<node>
都有一个唯一的ID和一个通过lat和lon指定的坐标。几何的方式由它引用其节点的顺序定义,而不是节点在响应文件中出现的顺序!在您的特定情况下,方式从ID 2025084669 的节点开始,并以ID 3362188585 的节点结束。另请注意,单一方式可以多次引用同一节点(例如,如果它是环形交叉口)。并且可以通过多种方式引用单个节点(例如,如果它是结点)。
如果您创建一个OSM帐户并尝试使用其中一个地图编辑器,那么理解这些原语可能会更容易。
关于JSON输出:我建议摆脱XAPI兼容性调用,而是开始使用功能更强大的Overpass XML或Overpass QL(参见language guide):raw data,{{3 }}。请注意,此处的边界框格式与XAPI语法中的顺序不同。