Added caching for generated images

This commit is contained in:
2025-06-06 22:10:11 -07:00
parent da8aada1bf
commit 61727c1254

View File

@@ -65,14 +65,22 @@ def get_radar_frames(site, datetime_t, num_frames):
closest_datetime = _nearestDate(datetimes, datetime_t) closest_datetime = _nearestDate(datetimes, datetime_t)
index = datetimes.index(closest_datetime) index = datetimes.index(closest_datetime)
radarFrames = [0] * num_frames #radarFrames = [0] * num_frames
radarFrames = {}
i = index i = index
printdebug('Pulling all the radar images requested') printdebug('Pulling all the radar images requested')
while i > (index - num_frames) and i >= 0: 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 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): def get_radar_from_aws(aws_object):
""" """
@@ -150,7 +158,7 @@ def generate_radar_image(radar_data, tiler, mercator):
ax.add_image(tiler, 6) ax.add_image(tiler, 6)
printdebug('Plotting!') printdebug('Plotting!')
display.plot_ppi_map('reflectivity', sweep = 0, resolution='10m', display.plot_ppi_map('reflectivity', sweep = 0, resolution='10m',
vmin = 10, vmax = 64, vmin = -8, vmax = 64,
cmap = "ChaseSpectral", cmap = "ChaseSpectral",
min_lat = min_lat, min_lon = min_lon, min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_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' fmt = '%Y%m%d_%H%M%S'
currentDatetime = datetime.now(timezone.utc) currentDatetime = datetime.now(timezone.utc)
num_frames = 10 num_frames = 20
secondary_frames = [0] * (num_frames - 1) secondary_frames = [0] * (num_frames - 1)
radar = get_radar_frames('KVNX', currentDatetime, num_frames=num_frames) radar = get_radar_frames('KVNX', currentDatetime, num_frames=num_frames)
print(list(radar.keys()))
tiler = OSM(cache=True) tiler = OSM(cache=True)
mercator = tiler.crs mercator = tiler.crs
firstFrameFig = generate_radar_image(radar[0], tiler, mercator) radarKeys = list(radar.keys())
firstFrame = convert_fig_to_img(firstFrameFig)
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 i = 0
for i in range(num_frames - 1): for i in range(num_frames - 1):
fig = generate_radar_image(radar[i + 1], tiler, mercator) if not os.path.isfile(f'cache/radarimages/{radarKeys[i + 1]}.png'):
secondary_frames[i] = convert_fig_to_img(fig) fig = generate_radar_image(radar[radarKeys[i + 1]], tiler, mercator)
# filename = aws_object.key.replace('/', '_') 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) 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)