开放街图查询ATM

4
我想找到一种方法在Open Street Maps上查询特定城市的ATM机列表,你有什么想法吗?
我知道我们可以使用MapQuest来查询此信息,但它需要一个框并且给我的信息比Open Street Maps少。
谢谢。
1个回答

5
我猜你指的是MapQuest的Nominatim实例。仅供参考:Nominatim实际上是由OpenStreetMap社区创建的,MapQuest也在运行它。
使用Overpass API查询特定对象是最好的方法。这个API还有一个很好的前端界面overpass turbo。它使得创建查询和运行查询变得非常容易,并且还包括结果的漂亮可视化。
这个查询将检索柏林所有标记为amenity=atm的自动取款机:
<osm-script output="json" timeout="25">
  <!-- fetch area “berlin” to search in -->
  <id-query {{nominatimArea:berlin}} into="area"/>
  <!-- gather results -->
  <union>
    <!-- query part for: “atm” -->
    <query type="node">
      <has-kv k="amenity" v="atm"/>
      <area-query from="area"/>
    </query>
  </union>
  <!-- print results -->
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton" order="quadtile"/>
</osm-script>

你可以查看overpass turbo上的结果。这个查询是由overpass turbo自动生成的,我只需要在它的wizard中输入“柏林的ATM”即可。
请注意,这是一个特殊的overpass turbo查询,不能直接通过Overpass API运行。overpass turbo会添加一些额外的关键词,如{{nominatimArea:berlin}},它将自动替换为Nominatim返回的Berlin边界框。但如果你已经知道了bbox或想要使用Nominatim自己检索它,那么你可以直接指定它:
<osm-script output="json" timeout="25">
  <!-- gather results -->
  <union>
    <!-- query part for: “atm” -->
    <query type="node">
      <has-kv k="amenity" v="atm"/>
      <bbox-query e="13.92242431640625" n="52.67221863915279" s="52.32778621884898" w="12.992706298828125"/>
    </query>
  </union>
  <!-- print results -->
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton" order="quadtile"/>
</osm-script>

Overpass API和overpass turbo都支持多种输出格式,包括XML和JSON。

1
scai,非常感谢您提供这样的答案。很好的例子和解释。 - maluk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接