mal*_*luk 3 web-services openstreetmap
我正在尝试找到一种方法来查询 Open Street Maps 以获取特定城市的 ATM 列表,有什么想法可以实现这一点吗?
我知道我们可以使用 mapquest 来查询这些信息,但它需要一个框,而且它提供的信息比 Open Street Maps 少。
谢谢。
我猜你的意思是 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。
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |