![](/img/trans.png)
[英]Trying to send xml file using Python Requests to OpenStreetMap Overpass API
[英]Python wrapper to run requests on the endpoint of overpass-API
我們使用Overpass API python包裝器將圍繞OpenStreetMap Overpass API的薄Python包裝器https://github.com/mvexel/overpass-api-python-wrapper
我們有一些簡單的例子:
import overpass
api = overpass.API()
response = api.Get('node["name"="Salt Lake City"]')
請注意,您不必包括任何輸出meta語句。 包裝器將包裝它們。 我們將以字典形式獲得結果,該字典代表您將從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包裝器對立交橋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']] )
你怎么看?
你可以試試看
import overpass
api = overpass.API()
query = """
[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;
"""
resp = api._get_from_overpass(query)
data = [row.split('\t') for row in resp.text.split('\n')]
輸出:
for x in data[:5]:
print(x)
# ['@id', '@type', 'name', 'addr:postcode', 'addr:city', 'addr:street', 'addr:housenumber', 'website', ' contact:email=*']
# ['597375537', 'node', 'Centro de especialidades Emigrantes', '', '', '', '', '', '']
# ['1437313175', 'node', '', '', '', '', '', '', '']
# ['1595068136', 'node', '', '', '', '', '', '', '']
# ['2320596216', 'node', '', '', '', '', '', '', '']
要么
api = overpass.API()
query = """
area[name="Madrid"]->.a;
( node(area.a)[amenity=hospital];
way(area.a)[amenity=hospital];
rel(area.a)[amenity=hospital];);
"""
fmt = 'csv(::id,::type,"name","addr:postcode","addr:city","addr:street","addr:housenumber","website"," contact:email=*")'
data = api.get(query, responseformat=fmt)
輸出:
for x in data[:5]:
print(x)
# ['@id', '@type', 'name', 'addr:postcode', 'addr:city', 'addr:street', 'addr:housenumber', 'website', ' contact:email=*']
# ['597375537', 'node', 'Centro de especialidades Emigrantes', '', '', '', '', '', '']
# ['1437313175', 'node', '', '', '', '', '', '', '']
# ['1595068136', 'node', '', '', '', '', '', '', '']
# ['2320596216', 'node', '', '', '', '', '', '', '']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.