Пример #1
0
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'
Пример #2
0
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'
Пример #3
0
    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
Пример #4
0
    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