forked from edward/owl-map
New API call to get items in a place
This commit is contained in:
parent
a81cedaae0
commit
87005dea18
|
@ -914,3 +914,21 @@ def isa_incremental_search(search_terms):
|
|||
}
|
||||
ret.append(cur)
|
||||
return ret
|
||||
|
||||
def get_place_items(osm_type, osm_id):
|
||||
src_id = osm_id * {'way': 1, 'relation': -1}[osm_type]
|
||||
|
||||
q = (model.Item.query
|
||||
.join(model.ItemLocation)
|
||||
.join(model.Polygon, func.ST_Covers(model.Polygon.way, model.ItemLocation.location))
|
||||
.filter(model.Polygon.src_id == src_id))
|
||||
# sql = q.statement.compile(compile_kwargs={"literal_binds": True})
|
||||
|
||||
item_count = q.count()
|
||||
items = []
|
||||
for item in q:
|
||||
keys = ["item_id", "labels", "descriptions", "aliases", "sitelinks", "claims"]
|
||||
item_dict = {key: getattr(item, key) for key in keys}
|
||||
items.append(item_dict)
|
||||
|
||||
return {"count": item_count, "items": items}
|
||||
|
|
|
@ -450,6 +450,15 @@ def api_wikidata_items():
|
|||
t1 = time() - t0
|
||||
return cors_jsonify(success=True, duration=t1, **ret)
|
||||
|
||||
@app.route("/api/1/place/<osm_type>/<int:osm_id>")
|
||||
def api_place_items(osm_type, osm_id):
|
||||
t0 = time()
|
||||
|
||||
ret = api.get_place_items(osm_type, osm_id)
|
||||
|
||||
t1 = time() - t0
|
||||
return cors_jsonify(success=True, duration=t1, **ret)
|
||||
|
||||
|
||||
@app.route("/api/1/osm")
|
||||
def api_osm_objects():
|
||||
|
|
Loading…
Reference in a new issue