这是我访问 overpy 和 Overpass API 的代码。我需要城市的每条街道。替换函数不太好,但应该可以工作,因为我需要双大括号,如果我简单地编写它们,则无法使用 then 。但我的问题有所不同。如果我在 Overpass API 网站上运行此代码,它就可以正常工作。但如果我发送以下内容,我会从 Overpy 收到此错误:
overpy.exception.OverpassBadRequest: Error: line 3: parse error: Unknown type "{"
Error: line 3: parse error: An empty query is not allowed
Error: line 3: parse error: ';' expected - '{' found.
有谁知道我的错误在哪里?
提前致谢!
import overpy
def fetchAPI():
api = overpy.Overpass()
# fetch all streets in city
value = '''
[out:json];
§$geocodeArea:"Berlin, Deutschland"%&->.searchArea;
way["highway"]["name"](area.searchArea);
out;
'''.replace('§', '{').replace('$', '{').replace('%', '}').replace('&', '}')
print(value)
result = api.query(value)
#get from the result the first way and print the name
print(len(result.ways))
#for i in range(len(result.ways)):
#print(result.ways[i].tags.get("name"))
if __name__ == "__main__":
fetchAPI()
geocodeArea
是立交桥涡轮增压专用扩展,如 OpenStreetMap wiki 页面 中所述。此扩展仅在您的浏览器中以 Javascript 代码形式提供。
由于您将查询直接发送到 Overpass API 后端服务,因此您绕过了此前端代码,并且后端会抱怨 Overpass QL 语法无效。这完全是预料之中的,并且意味着您必须在 Python 代码中实现类似于
geocodeArea
的内容。