打开街道地图查询 ATM

mal*_*luk 3 web-services openstreetmap

我正在尝试找到一种方法来查询 Open Street Maps 以获取特定城市的 ATM 列表,有什么想法可以实现这一点吗?

我知道我们可以使用 mapquest 来查询这些信息,但它需要一个框,而且它提供的信息比 Open Street Maps 少。

谢谢。

sca*_*cai 5

我猜你的意思是 MapQuest 的 Nominatim 实例。只是为了记录:Nominatim实际上是由 OpenStreetMap 社区创建的。MapQuest 也只是运行它。

查询特定对象最好使用Overpass API 来完成。这个 API 也有一个不错的前端,立交桥 turbo。它使创建查询和运行它们变得非常容易,并且还包括一个很好的结果可视化。

此查询将检索柏林的所有 ATM(标记为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>
Run Code Online (Sandbox Code Playgroud)

您可以在立交桥涡轮上查看结果。这个查询是由 overpass turbo 自动生成的,我只需要在它的向导中输入“atm in Berlin” 。

请注意,这是一个特殊的立交桥涡轮查询,不能直接通过立交桥 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>
Run Code Online (Sandbox Code Playgroud)

Overpass API 和 overpass turbo 都支持结果的各种输出格式,包括 XML 和 JSON。