Пример #1
0
    def create_animation(self, dataset_name, year_list, indicator_name, viz_metadata):
        map_file_list = []
        for year in year_list:
            map_file_list.append(
                os.path.join(
                    self.storage_location,
                    "anim_"
                    + dataset_name
                    + "_map_"
                    + str(year)
                    + "_"
                    + indicator_name
                    + "."
                    + MapnikMap.get_file_extension(self),
                )
            )

        table_name = dataset_name + "_animated_map_" + str(min(year_list)) + "_" + indicator_name
        animation_file_name = str(os.path.join(self.storage_location, table_name + "." + self.get_file_extension()))
        os.system("convert -delay 100 %s -loop 0 %s" % (" ".join(map_file_list), animation_file_name))

        # delete intermediate png files
        for i in range(map_file_list.__len__()):
            os.remove(map_file_list[i])

        metadata = ([indicator_name], table_name, [min(year_list)])
        viz_metadata.append(metadata)
Пример #2
0
    def create_animation(self, dataset_name, year_list, indicator_name,
                         viz_metadata):
        map_file_list = []
        for year in year_list:
            map_file_list.append(
                os.path.join(
                    self.storage_location,
                    'anim_' + dataset_name + '_map_' + str(year) + '_' +
                    indicator_name + '.' + MapnikMap.get_file_extension(self)))

        table_name = dataset_name + '_animated_map_' + str(
            min(year_list)) + '_' + indicator_name
        animation_file_name = str(
            os.path.join(self.storage_location,
                         table_name + '.' + self.get_file_extension()))
        os.system('convert -delay 100 %s -loop 0 %s' %
                  (' '.join(map_file_list), animation_file_name))

        # delete intermediate png files
        for i in range(map_file_list.__len__()):
            os.remove(map_file_list[i])

        metadata = ([indicator_name], table_name, [min(year_list)])
        viz_metadata.append(metadata)
Пример #3
0
    def visualize(self, indicators_to_visualize, computed_indicators):
        """Create a map for the given indicator, save it to the cache
        directory's 'indicators' sub-directory."""

        # TODO: eliminate this example indicator stuff
        example_indicator = computed_indicators[indicators_to_visualize[0]]
        source_data = example_indicator.source_data
        dataset_to_attribute_map = {}

        package_order = source_data.get_package_order()

        self._create_input_stores(years=source_data.years)

        for name, computed_indicator in computed_indicators.items():
            if name not in indicators_to_visualize:
                continue

            if computed_indicator.source_data != source_data:
                raise Exception("result templates in indicator batch must all be the same.")
            dataset_name = computed_indicator.indicator.dataset_name
            if dataset_name not in dataset_to_attribute_map:
                dataset_to_attribute_map[dataset_name] = []
            dataset_to_attribute_map[dataset_name].append(name)

        viz_metadata = []
        for dataset_name, indicator_names in dataset_to_attribute_map.items():
            attributes = [
                (name, computed_indicators[name].get_computed_dataset_column_name()) for name in indicator_names
            ]

            for year in source_data.years:
                SessionConfiguration(new_instance=True, package_order=package_order, in_storage=AttributeCache())
                SimulationState().set_cache_directory(source_data.cache_directory)
                SimulationState().set_current_time(year)
                dataset = SessionConfiguration().get_dataset_from_pool(dataset_name)
                dataset.load_dataset()

                if dataset.get_coordinate_system() is not None:
                    dataset.compute_variables(names=dataset.get_coordinate_system())

                for indicator_name, computed_name in attributes:

                    indicator = computed_indicators[indicator_name]

                    table_data = self.input_stores[year].load_table(
                        table_name=dataset_name, column_names=[computed_name]
                    )

                    if computed_name in table_data:

                        table_name = self.get_name(
                            dataset_name=dataset_name, years=[year], attribute_names=[indicator_name]
                        )

                        if self.scale:
                            min_value, max_value = self.scale
                        else:
                            min_value, max_value = (None, None)

                        file_path = os.path.join(
                            self.storage_location, "anim_" + table_name + "." + MapnikMap.get_file_extension(self)
                        )

                        dataset.add_attribute(name=str(computed_name), data=table_data[computed_name])

                        dataset.plot_map(
                            name=str(computed_name),
                            min_value=min_value,
                            max_value=max_value,
                            file=str(file_path),
                            my_title=str(indicator_name),
                            color_list=self.color_list,
                            range_list=self.range_list,
                            label_list=self.label_list,
                            is_animation=True,
                            year=year,
                            resolution=self.resolution,
                            page_dims=self.page_dims,
                            map_lower_left=self.map_lower_left,
                            map_upper_right=self.map_upper_right,
                            legend_lower_left=self.legend_lower_left,
                            legend_upper_right=self.legend_upper_right
                            # filter = where(table_data[computed_name] != -1)
                            # filter = 'urbansim.gridcell.is_fully_in_water'
                        )

                        # metadata = ([indicator_name], table_name, [year])
                        # viz_metadata.append(metadata)
                    else:
                        logger.log_warning("There is no computed indicator %s" % computed_name)

            for indicator_name, computed_name in attributes:
                self.create_animation(
                    dataset_name=dataset_name,
                    year_list=source_data.years,
                    indicator_name=str(indicator_name),
                    viz_metadata=viz_metadata,
                )

        visualization_representations = []
        for indicator_names, table_name, years in viz_metadata:
            visualization_representations.append(
                self._get_visualization_metadata(
                    computed_indicators=computed_indicators,
                    indicators_to_visualize=indicator_names,
                    table_name=table_name,
                    years=years,
                )
            )

        return visualization_representations
Пример #4
0
    def visualize(self, indicators_to_visualize, computed_indicators):
        """Create a map for the given indicator, save it to the cache
        directory's 'indicators' sub-directory."""

        #TODO: eliminate this example indicator stuff
        example_indicator = computed_indicators[indicators_to_visualize[0]]
        source_data = example_indicator.source_data
        dataset_to_attribute_map = {}

        package_order = source_data.get_package_order()

        self._create_input_stores(years=source_data.years)

        for name, computed_indicator in computed_indicators.items():
            if name not in indicators_to_visualize: continue

            if computed_indicator.source_data != source_data:
                raise Exception(
                    'result templates in indicator batch must all be the same.'
                )
            dataset_name = computed_indicator.indicator.dataset_name
            if dataset_name not in dataset_to_attribute_map:
                dataset_to_attribute_map[dataset_name] = []
            dataset_to_attribute_map[dataset_name].append(name)

        viz_metadata = []
        for dataset_name, indicator_names in dataset_to_attribute_map.items():
            attributes = [
                (name,
                 computed_indicators[name].get_computed_dataset_column_name())
                for name in indicator_names
            ]

            for year in source_data.years:
                SessionConfiguration(new_instance=True,
                                     package_order=package_order,
                                     in_storage=AttributeCache())
                SimulationState().set_cache_directory(
                    source_data.cache_directory)
                SimulationState().set_current_time(year)
                dataset = SessionConfiguration().get_dataset_from_pool(
                    dataset_name)
                dataset.load_dataset()

                if dataset.get_coordinate_system() is not None:
                    dataset.compute_variables(
                        names=dataset.get_coordinate_system())

                for indicator_name, computed_name in attributes:

                    indicator = computed_indicators[indicator_name]

                    table_data = self.input_stores[year].load_table(
                        table_name=dataset_name, column_names=[computed_name])

                    if computed_name in table_data:

                        table_name = self.get_name(
                            dataset_name=dataset_name,
                            years=[year],
                            attribute_names=[indicator_name])

                        if self.scale:
                            min_value, max_value = self.scale
                        else:
                            min_value, max_value = (None, None)

                        file_path = os.path.join(
                            self.storage_location, 'anim_' + table_name + '.' +
                            MapnikMap.get_file_extension(self))

                        dataset.add_attribute(name=str(computed_name),
                                              data=table_data[computed_name])

                        dataset.plot_map(
                            name=str(computed_name),
                            min_value=min_value,
                            max_value=max_value,
                            file=str(file_path),
                            my_title=str(indicator_name),
                            color_list=self.color_list,
                            range_list=self.range_list,
                            label_list=self.label_list,
                            is_animation=True,
                            year=year,
                            resolution=self.resolution,
                            page_dims=self.page_dims,
                            map_lower_left=self.map_lower_left,
                            map_upper_right=self.map_upper_right,
                            legend_lower_left=self.legend_lower_left,
                            legend_upper_right=self.legend_upper_right
                            #filter = where(table_data[computed_name] != -1)
                            #filter = 'urbansim.gridcell.is_fully_in_water'
                        )

                        #metadata = ([indicator_name], table_name, [year])
                        #viz_metadata.append(metadata)
                    else:
                        logger.log_warning(
                            'There is no computed indicator %s' %
                            computed_name)

            for indicator_name, computed_name in attributes:
                self.create_animation(dataset_name=dataset_name,
                                      year_list=source_data.years,
                                      indicator_name=str(indicator_name),
                                      viz_metadata=viz_metadata)

        visualization_representations = []
        for indicator_names, table_name, years in viz_metadata:
            visualization_representations.append(
                self._get_visualization_metadata(
                    computed_indicators=computed_indicators,
                    indicators_to_visualize=indicator_names,
                    table_name=table_name,
                    years=years))

        return visualization_representations