def level_appender(polygon, claims_dict, max_claims_dict): if polygon["properties"]["ID"] in claims_dict: polygon["properties"]["polygon_claims"] = claims_dict[polygon["properties"]["ID"]] else: polygon["properties"]["polygon_claims"] = 0 if 'parent_id' in polygon["properties"] and polygon["properties"]['parent_id'] in max_claims_dict: max_claims = max_claims_dict[polygon["properties"]['parent_id']] else: max_claims = 0 polygon["properties"]['color'] = Polygon.color_spot(polygon["properties"]["polygon_claims"], max_claims)\ if polygon["properties"]["polygon_claims"] else 'grey'
def level_appender(polygon, claims_dict, max_claims_dict): if polygon["properties"]["ID"] in claims_dict: polygon["properties"]["polygon_claims"] = claims_dict[ polygon["properties"]["ID"]] else: polygon["properties"]["polygon_claims"] = 0 if 'parent_id' in polygon["properties"] and polygon["properties"][ 'parent_id'] in max_claims_dict: max_claims = max_claims_dict[polygon["properties"]['parent_id']] else: max_claims = 0 polygon["properties"]['color'] = Polygon.color_spot(polygon["properties"]["polygon_claims"], max_claims)\ if polygon["properties"]["polygon_claims"] else 'grey'
def to_representation(self, data): iterable = data.all() if isinstance(data, models.Manager) else data polygons = [] buildings_parents, buildings_ids, buildings_objects = [], [], [] district_parents, district_ids, district_objects = [], [], [] area_parents, area_ids, area_objects = [], [], [] region_ids, region_objects = [], [] # start = time.time() for item in iterable: # start_repr = time.time() item_obj = self.child.to_representation(item) # print(' to representaion', time.time() - start_repr) level = item_obj["properties"]['level'] if level == 4: # start_repr = time.time() level_separator(item_obj, buildings_parents, buildings_ids, buildings_objects) # print(' level_separator', time.time() - start_repr) elif level == 3: level_separator(item_obj, district_parents, district_ids, district_objects) elif level == 2: level_separator(item_obj, area_parents, area_ids, area_objects) elif level == 1: region_ids.append(item_obj["properties"]['ID']) region_objects.append(item_obj) # print(' separating by levels', time.time() - start) # ------------------------------Process buildings --------------------- if buildings_ids: org_ids = [] # start = time.time() for polygon in buildings_objects: for org in polygon["properties"]["organizations"]: if org['id'] not in org_ids: org_ids.append(org['id']) # print(' getting org ids', time.time() - start) # start = time.time() claims_for_orgs = get_sum_for_layers(org_ids, 4) # print(' agregating claims(sql)', time.time() - start) # start = time.time() buildings_max_claims_dict = get_max_for_layers( buildings_parents, 4) # print(' agregating max claims(sql)', time.time() - start) for polygon in buildings_objects: for org in polygon["properties"]["organizations"]: if org['id'] in claims_for_orgs: org['claims'] = claims_for_orgs[org['id']] else: org['claims'] = 0 polygon["properties"]["polygon_claims"] = sum([ x['claims'] for x in polygon["properties"]["organizations"] ]) if 'parent_id' in polygon["properties"] and polygon[ "properties"]['parent_id'] in buildings_max_claims_dict: max_claims = buildings_max_claims_dict[ polygon["properties"]['parent_id']] else: max_claims = 0 polygon["properties"]['color'] = Polygon.color_spot(polygon["properties"]["polygon_claims"], max_claims)\ if polygon["properties"]["polygon_claims"] else 'grey' polygons += buildings_objects # ---------------------- Process districts ----------------------- if district_ids: claims_for_houses = get_sum_for_layers(district_ids, 3) district_max_claims_dict = get_max_for_layers(district_parents, 3) for polygon in district_objects: level_appender(polygon, claims_for_houses, district_max_claims_dict) polygons += district_objects # ---------------------- Process cities ----------------------- if area_ids: claims_for_areas = get_sum_for_layers(area_ids, 2) area_max_claims_dict = get_max_for_layers(area_parents, 2) for polygon in area_objects: level_appender(polygon, claims_for_areas, area_max_claims_dict) polygons += area_objects # ---------------------- Process regions ----------------------- if region_ids: claims_for_regions = get_sum_for_layers(region_ids, 1) region_max_claims_dict = get_max_for_layers(['root'], 1) for polygon in region_objects: level_appender(polygon, claims_for_regions, region_max_claims_dict) polygons += region_objects return polygons
def to_representation(self, data): iterable = data.all() if isinstance(data, models.Manager) else data polygons = [] buildings_parents, buildings_ids, buildings_objects = [], [], [] district_parents, district_ids, district_objects = [], [], [] area_parents, area_ids, area_objects = [], [], [] region_ids, region_objects = [], [] # start = time.time() for item in iterable: # start_repr = time.time() item_obj = self.child.to_representation(item) # print(' to representaion', time.time() - start_repr) level = item_obj["properties"]['level'] if level == 4: # start_repr = time.time() level_separator(item_obj, buildings_parents, buildings_ids, buildings_objects) # print(' level_separator', time.time() - start_repr) elif level == 3: level_separator(item_obj, district_parents, district_ids, district_objects) elif level == 2: level_separator(item_obj, area_parents, area_ids, area_objects) elif level == 1: region_ids.append(item_obj["properties"]['ID']) region_objects.append(item_obj) # print(' separating by levels', time.time() - start) # ------------------------------Process buildings --------------------- if buildings_ids: org_ids = [] # start = time.time() for polygon in buildings_objects: for org in polygon["properties"]["organizations"]: if org['id'] not in org_ids: org_ids.append(org['id']) # print(' getting org ids', time.time() - start) # start = time.time() claims_for_orgs = get_sum_for_layers(org_ids, 4) # print(' agregating claims(sql)', time.time() - start) # start = time.time() buildings_max_claims_dict = get_max_for_layers(buildings_parents, 4) # print(' agregating max claims(sql)', time.time() - start) for polygon in buildings_objects: for org in polygon["properties"]["organizations"]: if org['id'] in claims_for_orgs: org['claims'] = claims_for_orgs[org['id']] else: org['claims'] = 0 polygon["properties"]["polygon_claims"] = sum( [x['claims'] for x in polygon["properties"]["organizations"]]) if 'parent_id' in polygon["properties"] and polygon["properties"]['parent_id'] in buildings_max_claims_dict: max_claims = buildings_max_claims_dict[polygon["properties"]['parent_id']] else: max_claims = 0 polygon["properties"]['color'] = Polygon.color_spot(polygon["properties"]["polygon_claims"], max_claims)\ if polygon["properties"]["polygon_claims"] else 'grey' polygons += buildings_objects # ---------------------- Process districts ----------------------- if district_ids: claims_for_houses = get_sum_for_layers(district_ids, 3) district_max_claims_dict = get_max_for_layers(district_parents, 3) for polygon in district_objects: level_appender(polygon, claims_for_houses, district_max_claims_dict) polygons += district_objects # ---------------------- Process cities ----------------------- if area_ids: claims_for_areas = get_sum_for_layers(area_ids, 2) area_max_claims_dict = get_max_for_layers(area_parents, 2) for polygon in area_objects: level_appender(polygon, claims_for_areas, area_max_claims_dict) polygons += area_objects # ---------------------- Process regions ----------------------- if region_ids: claims_for_regions = get_sum_for_layers(region_ids, 1) region_max_claims_dict = get_max_for_layers(['root'], 1) for polygon in region_objects: level_appender(polygon, claims_for_regions, region_max_claims_dict) polygons += region_objects return polygons