了解Open街道地图查询响应的响应

时间:2015-06-09 07:10:33

标签: ios iphone mkmapview mapkit openstreetmap

我正在尝试获取特定坐标周围位置的速度限制。

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平台来解析这个响应。

1 个答案:

答案 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语法中的顺序不同。