From c3023e57887feb03cdfe60386ad3fb1bd1fbe90a Mon Sep 17 00:00:00 2001 From: Felix Delattre <fd@gfz-potsdam.de> Date: Mon, 9 Aug 2021 14:55:28 +0000 Subject: [PATCH] Added endpoint to query buildings by bounding box --- obmdataapi/__init__.py | 34 +++++++++++++++++++++++++++++++--- tests/test_obmdataapi.py | 3 ++- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/obmdataapi/__init__.py b/obmdataapi/__init__.py index 4a839c3..4c6c2d8 100644 --- a/obmdataapi/__init__.py +++ b/obmdataapi/__init__.py @@ -79,8 +79,36 @@ async def heartbeat() -> dict: @app.api.add_function async def get_building(osm_id) -> dict: - building = await app.db.fetch_val( - "SELECT osm_id FROM osm_building_polygons WHERE osm_id = :osm_id", + result = await app.db.fetch_all( + "SELECT * FROM osm_building_polygons WHERE osm_id = :osm_id", values={"osm_id": int(osm_id)}, ) - return {"building": str(building)} + values = {} + for building in result: + for key, value in building.items(): + values[key] = value + return {"building": values} + + +@app.api.add_function +async def get_buildings_by_bbox(xmin, ymin, xmax, ymax) -> dict: + buildings = await app.db.fetch_all( + "SELECT * FROM osm_building_polygons \ + WHERE geometry && ST_MakeEnvelope(:xmin, :ymin, :xmax, :ymax, 4326)", + values={ + "xmin": float(xmin), + "ymin": float(ymin), + "xmax": float(xmax), + "ymax": float(ymax), + }, + ) + buildings_data_object = {} + for building in buildings: + osm_id = 0 + values = {} + for key, value in building.items(): + values[key] = value + if key == "osm_id": + osm_id = value + buildings_data_object[osm_id] = values + return {"buildings": buildings_data_object} diff --git a/tests/test_obmdataapi.py b/tests/test_obmdataapi.py index a4c7f76..43e2a81 100644 --- a/tests/test_obmdataapi.py +++ b/tests/test_obmdataapi.py @@ -40,4 +40,5 @@ def test_heartbeat(client) -> None: def test_get_building(client) -> None: response = request("http://127.0.0.1:5000/v1", "get_building", "-12412416").data.result - assert "-12412416" in response["building"] + print(response["building"]["osm_id"]) + assert -12412416 == response["building"]["osm_id"] -- GitLab