forked from edward/owl-map
Bug fix slow get_part_of for items with multiple markers
This commit is contained in:
parent
e3d825c48f
commit
c2cc7ba5b1
|
@ -96,14 +96,14 @@ def drop_way_area(tags):
|
||||||
del tags["way_area"]
|
del tags["way_area"]
|
||||||
return tags
|
return tags
|
||||||
|
|
||||||
def get_part_of(table_name, src_id, bbox_list):
|
def get_part_of(table_name, src_id, bbox):
|
||||||
table_map = {'point': point, 'line': line, 'polygon': polygon}
|
table_map = {'point': point, 'line': line, 'polygon': polygon}
|
||||||
table_alias = table_map[table_name].alias()
|
table_alias = table_map[table_name].alias()
|
||||||
|
|
||||||
s = (select([polygon.c.osm_id,
|
s = (select([polygon.c.osm_id,
|
||||||
polygon.c.tags,
|
polygon.c.tags,
|
||||||
func.ST_Area(func.ST_Collect(polygon.c.way))]).
|
func.ST_Area(func.ST_Collect(polygon.c.way))]).
|
||||||
where(and_(or_(*[func.ST_Intersects(bbox, polygon.c.way) for bbox in bbox_list]),
|
where(and_(func.ST_Intersects(bbox, polygon.c.way),
|
||||||
func.ST_Covers(polygon.c.way, table_alias.c.way),
|
func.ST_Covers(polygon.c.way, table_alias.c.way),
|
||||||
table_alias.c.osm_id == src_id,
|
table_alias.c.osm_id == src_id,
|
||||||
polygon.c.tags.has_key("name"),
|
polygon.c.tags.has_key("name"),
|
||||||
|
@ -718,8 +718,10 @@ def find_osm_candidates(item, limit=80, max_distance=450, names=None):
|
||||||
if area is not None:
|
if area is not None:
|
||||||
cur["area"] = area
|
cur["area"] = area
|
||||||
|
|
||||||
part_of = [i for i in get_part_of(table, src_id, bbox_list)
|
part_of = []
|
||||||
if i["tags"]["name"] != name]
|
for bbox in bbox_list:
|
||||||
|
part_of += [i for i in get_part_of(table, src_id, bbox)
|
||||||
|
if i["tags"]["name"] != name]
|
||||||
if part_of:
|
if part_of:
|
||||||
cur["part_of"] = part_of
|
cur["part_of"] = part_of
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue