簡體   English   中英

Python包裝器在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM