【发布时间】:2018-07-12 02:53:58
【问题描述】:
我们使用 Overpass API python wrapper 为 OpenStreetMap Overpass API https://github.com/mvexel/overpass-api-python-wrapper 提供了一个精简的 Python 包装器@
我们有一些简单的例子:
import overpass
api = overpass.API()
response = api.Get('node["name"="Salt Lake City"]')
请注意,您不必包含任何输出元语句。包装器将包装这些。 我们将得到我们的结果作为一个字典,它表示您将直接从 Overpass API 获得的 JSON 输出。
print [(feature['tags']['name'], feature['id']) for feature in response['elements']]
[(u'Salt Lake City', 150935219), (u'Salt Lake City', 585370637), (u'Salt Lake City', 1615721573)]
我们可以指定响应的格式。默认情况下,我们将使用 responseformat 参数获取 GeoJSON。替代方案是纯 JSON (json) 和 OSM XML (xml),直接由 Overpass API 输出。
response = api.Get('node["name"="Salt Lake City"]', responseformat="xml")
更新的问题:我们是否也可以获取 cvs - 我们可以使用 python 包装器向 overpass turbo 的端点执行如下请求吗?
[out:csv(::id,::type,"name","addr:postcode","addr:city",
"addr:street","addr:housenumber","website"," contact:email=*")][timeout:30];
area[name="Madrid"]->.a;
( node(area.a)[amenity=hospital];
way(area.a)[amenity=hospital];
rel(area.a)[amenity=hospital];);
out;
顺便说一句:我遇到了自述文本中的示例代码被破坏了:当我尝试以下操作时:
print( [(feature['tags']['name'], feature['id']) for feature in response['elements']] )
我得到了错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'elements'
This works, though:
print( [(feature['properties']['name'], feature['id']) for feature in response['features']] )
你怎么看?
【问题讨论】:
标签: python json linux openstreetmap overpass-api