Example #1
0
    def make_plot(overlay_definition_id, time_index=0, file_id=None):
        zoom_levels_for_currents = [('2-7', 8),  ('8-12', 4)]
        zoom_levels_for_others = [(None, None)]
        zoom_levels_for_winds = [('1-10', 2), ('11-12', 1)]
        if file_id is None:
            datafile = DataFile.objects.latest('model_date')

        #If plotting winds grab the latest wind file
        #-------------------------------------------------------------------------
        elif overlay_definition_id == 5:
            datafile = DataFile.objects.filter(type='WIND').latest('model_date')
        else:
            datafile = DataFile.objects.get(pk=file_id)

        #Wind has its own plotter if plotting winds use WindPlotter
        #-------------------------------------------------------------------------
        if overlay_definition_id == 5:
            plotter = WindPlotter(datafile.file.name)
        else:
            plotter = Plotter(datafile.file.name)

        overlay_definition = OverlayDefinition.objects.get(pk=overlay_definition_id)

        if overlay_definition_id == 3:
            zoom_levels = zoom_levels_for_currents
        elif overlay_definition_id == 5:
            zoom_levels = zoom_levels_for_winds
        else:
            zoom_levels = zoom_levels_for_others

        tile_dir = "tiles_{0}_{1}".format(overlay_definition.function_name, uuid4())
        overlay_ids = []
        for zoom_level in zoom_levels:
            # Make a plot with downsampling of 4, and with 2
            plot_filename, key_filename = plotter.make_plot(getattr(plot_functions, overlay_definition.function_name),
                                                            time_index=time_index, downsample_ratio=zoom_level[1], zoom_levels=zoom_level[0])

            overlay = Overlay(
                file=os.path.join(settings.UNCHOPPED_STORAGE_DIR, plot_filename),
                key=os.path.join(settings.KEY_STORAGE_DIR, key_filename),
                created_datetime=timezone.now(),
                definition_id=overlay_definition_id,
                applies_at_datetime=plotter.get_time_at_oceantime_index(time_index),
                zoom_levels=zoom_level[0],
                tile_dir=tile_dir,
                is_tiled=False
            )
            overlay.save()
            overlay_ids.append(overlay.id)
        return overlay_ids