mcenno
mcenno

Reputation: 561

Overpass query works on overpass-turbo.eu, but not locally

I'm trying to execute Overpass queries from a Python script. I'm practicing at overpass-turbo.eu and found the following query to work as intended:

[out:json][timeout:600];
{{geocodeArea:Niedersachsen}}->.searchArea;
(
  node[place=city](area.searchArea);  
  node[place=town](area.searchArea);  

);
out;

However, when I submit the exact same query from a Python script, I get an error:

import requests
overpass_query = """
[out:json][timeout:600];
{{geocodeArea:Niedersachsen}}->.searchArea;
(
  node[place=city](area.searchArea);  
  node[place=town](area.searchArea);  

);
out;
"""
overpass_url = "http://overpass-api.de/api/interpreter"
response = requests.get(overpass_url, params={'data': overpass_query})
data = response.json()

/home/enno/events/docker/etl/venv/bin/python /home/enno/events/docker/etl/test2.py
Traceback (most recent call last):
  File "/home/enno/events/docker/etl/test2.py", line 16, in <module>
    data = response.json()
  File "/home/enno/events/docker/etl/venv/lib/python3.6/site-packages/requests/models.py", line 897, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Process finished with exit code 1

Why is this? It seems to have to do with the curly braces, but I can't figure out how to solve this.

Many thanks,

Enno

Upvotes: 2

Views: 1107

Answers (1)

scai
scai

Reputation: 21469

The curly braces (aka {{geocodeArea:Niedersachsen}}) are a special feature of overpass turbo and are not part of Overpass API. See extended overpass turbo queries for a list of these shortcuts.

{{geocodeArea:name}} will tell overpass turbo to perform a geocoding request using Nominatim. It will then use the first result to construct an area(id) query. You have to perform the same step (using Nominatim or any other geocoder) in your program.

Upvotes: 1

Related Questions