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"]
|
||||
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_alias = table_map[table_name].alias()
|
||||
|
||||
s = (select([polygon.c.osm_id,
|
||||
polygon.c.tags,
|
||||
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),
|
||||
table_alias.c.osm_id == src_id,
|
||||
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:
|
||||
cur["area"] = area
|
||||
|
||||
part_of = [i for i in get_part_of(table, src_id, bbox_list)
|
||||
if i["tags"]["name"] != name]
|
||||
part_of = []
|
||||
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:
|
||||
cur["part_of"] = part_of
|
||||
|
||||
|
|
Loading…
Reference in a new issue