From 656c3fd41413d1a95b3d8fbec4bd01b31642c2ce Mon Sep 17 00:00:00 2001 From: cquest Date: Tue, 14 Mar 2023 15:50:21 +0100 Subject: [PATCH] allow searches on where:osm and where:wikidata --- backend.py | 6 ++++++ setup.sql | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/backend.py b/backend.py index 32e7142..8e07064 100644 --- a/backend.py +++ b/backend.py @@ -203,6 +203,12 @@ class EventResource(BaseEvent): # ST_Scale is a workaround to postgis bug not taking precision into account in ST_LineFromEncodedPolyline event_bbox = cur.mogrify(" AND ST_Intersects(geom, ST_Buffer(ST_Scale(ST_LineFromEncodedPolyline(%s),1/10^(%s-5),1/10^(%s-5))::geography, %s)::geometry) ",(req.params['polyline'], precision, precision, buffer)).decode("utf-8") event_dist = cur.mogrify("ST_Length(ST_ShortestLine(geom, ST_Scale(ST_LineFromEncodedPolyline(%s),1/10^(%s-5),1/10^(%s-5)))::geography)::integer as distance, ",(req.params['polyline'], precision, precision)).decode("utf-8") + elif 'where:osm' in req.params: + event_bbox = cur.mogrify(" AND events_tags ? 'where:osm' AND events_tags->>'where:osm'=%s ", (req.params['where:osm'],)).decode("utf-8") + event_dist = "" + elif 'where:wikidata' in req.params: + event_bbox = cur.mogrify(" AND events_tags ? 'where:wikidata' AND events_tags->>'where:wikidata'=%s ", (req.params['where:wikidata'],)).decode("utf-8") + event_dist = "" else: event_bbox = "" event_dist = "" diff --git a/setup.sql b/setup.sql index 587bc07..578ee62 100644 --- a/setup.sql +++ b/setup.sql @@ -145,3 +145,7 @@ ALTER TABLE ONLY events -- -- PostgreSQL database dump complete -- + + +CREATE INDEX events_idx_where_osm ON events USING spgist ((events_tags->>'where:osm')) WHERE events_tags ? 'where:osm'; +CREATE INDEX events_idx_where_wikidata ON events USING spgist ((events_tags->>'where:wikidata')) WHERE events_tags ? 'where:wikidata';