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