57 lines
1.2 KiB
Python
Executable file
57 lines
1.2 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
import overpy
|
|
|
|
# brandname : overpass query filters
|
|
BRANDS: dict[str, str] = {
|
|
"greggs": "[\"brand:wikidata\"=\"Q3403981\"]",
|
|
}
|
|
|
|
EncodedLocation = list[float, list[float]]
|
|
|
|
|
|
def fetch_data(brand: str) -> list[tuple[float | None, float | None]]:
|
|
"""Fetch a list of locations from OSM."""
|
|
api = overpy.Overpass()
|
|
|
|
filters = BRANDS[brand]
|
|
query = api.query(f"nwr{filters}; out center;")
|
|
|
|
result = []
|
|
|
|
for way in query.ways:
|
|
result.append((way.center_lat, way.center_lon))
|
|
|
|
for node in query.nodes:
|
|
result.append((node.lat, node.lon))
|
|
|
|
for (lat, lon) in result:
|
|
if (lat is None) or (lon is None):
|
|
raise ValueError("Item missing coords!")
|
|
|
|
return result
|
|
|
|
|
|
def encode(location: tuple[float, float]) -> EncodedLocation:
|
|
"""Encode a location."""
|
|
|
|
# Stub
|
|
return []
|
|
|
|
|
|
def decode(location: EncodedLocation) -> tuple[float, float]:
|
|
"""Decode into a location."""
|
|
|
|
# Stub
|
|
return (0.091659, 52.210796)
|
|
|
|
|
|
def main():
|
|
"""Testing."""
|
|
print("Running query...")
|
|
greggs = fetch_data("greggs")
|
|
print(f"Query done - got {len(greggs)} Greggs!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|