Overpass API 和 Overpy 的语法错误

问题描述 投票:0回答:1

这是我访问 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()
python openstreetmap overpass-api
1个回答
0
投票

geocodeArea
是立交桥涡轮增压专用扩展,如 OpenStreetMap wiki 页面 中所述。此扩展仅在您的浏览器中以 Javascript 代码形式提供。

由于您将查询直接发送到 Overpass API 后端服务,因此您绕过了此前端代码,并且后端会抱怨 Overpass QL 语法无效。这完全是预料之中的,并且意味着您必须在 Python 代码中实现类似于

geocodeArea
的内容。

© www.soinside.com 2019 - 2024. All rights reserved.