From 61727c125421d9b2fd863cb800bfdb440eb42784 Mon Sep 17 00:00:00 2001 From: Madison Date: Fri, 6 Jun 2025 22:10:11 -0700 Subject: [PATCH] Added caching for generated images --- testfile cartopy.py | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/testfile cartopy.py b/testfile cartopy.py index 75627c1..4220e5a 100644 --- a/testfile cartopy.py +++ b/testfile cartopy.py @@ -65,14 +65,22 @@ def get_radar_frames(site, datetime_t, num_frames): closest_datetime = _nearestDate(datetimes, datetime_t) index = datetimes.index(closest_datetime) - radarFrames = [0] * num_frames + #radarFrames = [0] * num_frames + radarFrames = {} i = index printdebug('Pulling all the radar images requested') while i > (index - num_frames) and i >= 0: - radarFrames[num_frames - ((index - i) + 1)] = get_radar_from_aws(keys[i].Object()) + #radarFrames[num_frames - ((index - i) + 1)] = get_radar_from_aws(keys[i].Object()) + filename = keys[i].key.replace('/', '_') + radarFrames[filename] = get_radar_from_aws(keys[i].Object()) i = i - 1 - return radarFrames + sortedIndices = sorted(radarFrames) + sortedRadarFrames = {} + for key in sortedIndices: + sortedRadarFrames[key] = radarFrames[key] + + return sortedRadarFrames def get_radar_from_aws(aws_object): """ @@ -150,7 +158,7 @@ def generate_radar_image(radar_data, tiler, mercator): ax.add_image(tiler, 6) printdebug('Plotting!') display.plot_ppi_map('reflectivity', sweep = 0, resolution='10m', - vmin = 10, vmax = 64, + vmin = -8, vmax = 64, cmap = "ChaseSpectral", min_lat = min_lat, min_lon = min_lon, max_lat = max_lat, max_lon = max_lon, @@ -165,22 +173,33 @@ def generate_radar_image(radar_data, tiler, mercator): fmt = '%Y%m%d_%H%M%S' currentDatetime = datetime.now(timezone.utc) -num_frames = 10 +num_frames = 20 secondary_frames = [0] * (num_frames - 1) radar = get_radar_frames('KVNX', currentDatetime, num_frames=num_frames) +print(list(radar.keys())) tiler = OSM(cache=True) mercator = tiler.crs -firstFrameFig = generate_radar_image(radar[0], tiler, mercator) -firstFrame = convert_fig_to_img(firstFrameFig) +radarKeys = list(radar.keys()) + +if not os.path.isfile(f'cache/radarimages/{radarKeys[0]}.png'): + firstFrameFig = generate_radar_image(radar[radarKeys[0]], tiler, mercator) + firstFrame = convert_fig_to_img(firstFrameFig) + firstFrame.save(f'cache/radarimages/{radarKeys[0]}.png') +else: + firstFrame = Image.open(f'cache/radarimages/{radarKeys[0]}.png') + i = 0 for i in range(num_frames - 1): - fig = generate_radar_image(radar[i + 1], tiler, mercator) - secondary_frames[i] = convert_fig_to_img(fig) - # filename = aws_object.key.replace('/', '_') + if not os.path.isfile(f'cache/radarimages/{radarKeys[i + 1]}.png'): + fig = generate_radar_image(radar[radarKeys[i + 1]], tiler, mercator) + secondary_frames[i] = convert_fig_to_img(fig) + secondary_frames[i].save(f'cache/radarimages/{radarKeys[i + 1]}.png') + else: + secondary_frames[i] = Image.open(f'cache/radarimages/{radarKeys[i + 1]}.png') datetimeString = datetime.strftime(currentDatetime, fmt) -firstFrame.save(f'testradar_{datetimeString}.gif', append_images=secondary_frames, duration=200) +firstFrame.save(f'testradar_{datetimeString}.webp', append_images=secondary_frames, duration=200)