#!/bin/bash # Make sure radar ID, animation period, and delete after values are provided if [ $# -ne 3 ] ; then echo "Usage $0 {radar ID} {animation period in hrs} {delete after x hrs|never}" exit 1 fi # List of radar ids (https://www.weather.gov/jetstream/ridge_download) radar_ids=( ABC ABR ABX ACG AEC AHG AIH AKC AKQ AMA AMX APD APX ARX ATX BBX BGM BHX BIS BLX BMX BOX BRO BUF BYX CAE CBW CBX CCX CLE CLX CRP CXX CYS DAX DDC DFX DGX DIX DLH DMX DOX DTX DVN DYX EAX EMX ENX EOX EPZ ESX EVX EWX EYX FCX FDR FDX FFC FSD FSX FTG FWS GGW GJX GLD GRB GRK GRR GSP GUA GWX GYX HDX HGX HKI HKM HMO HNX HPX HTX HWA ICT ICX ILN ILX IND INX IWA IWX JAX JGX JKL JUA LBB LCH LGX LIX LNX LOT LRX LSX LTX LVX LWX LZK MAF MAX MBX MHX MKX MLB MOB MPX MQT MRX MSX MTX MUX MVX MXX NKX NQA OAX OHX OKX OTX PAH PBZ PDT POE PUX RAX RGX RIW RLX RTX SFX SGF SHV SJT SOX SRX TBW TFX TLH TLX TWX TYX UDX UEX VAX VBX VNX VTX VWX YUX ) # Was a valid radar ID provided? radar_flag=0 for i in "${radar_ids[@]}" do if [ $1 = $i ] ; then radar_flag=1 fi done # Radar ID not found if [ $radar_flag -eq 0 ] ; then echo "Radar ID \"$1\" not found. Valid radar IDs include:" echo ${radar_ids[@]} echo Refer to https://www.weather.gov/jetstream/ridge_download echo Quitting. exit 1 fi # Time period notes for Darwin (Mac OS X) users: # Values like -.17 and .17 won't work with Darwin's find, # instead use values like -4h and 4h. # Time period to animate animate_time=$2 # last 4 hours # Delete files older than delete_older_than=$3 #older than 4 hours # Get the radar image layers wget --quiet https://radar.weather.gov/Overlays/Topo/Short/$1_Topo_Short.jpg -O layer0.jpg wget --quiet https://radar.weather.gov/RadarImg/N0R/$1_N0R_0.gif -O layer1.gif wget --quiet https://radar.weather.gov/Overlays/County/Short/$1_County_Short.gif -O layer2.gif wget --quiet https://radar.weather.gov/Overlays/Rivers/Short/$1_Rivers_Short.gif -O layer3.gif wget --quiet https://radar.weather.gov/Overlays/Highways/Short/$1_Highways_Short.gif -O layer4.gif wget --quiet https://radar.weather.gov/Overlays/Cities/Short/$1_City_Short.gif -O layer5.gif wget --quiet https://radar.weather.gov/Warnings/Short/$1_Warnings_0.gif -O layer6.gif wget --quiet https://radar.weather.gov/Legend/N0R/$1_N0R_Legend_0.gif -O layer7.gif # Stack the layer images convert layer0.jpg layer1.gif -composite +dither -colors 128 layer0-1.gif convert layer0-1.gif layer2.gif -composite +dither -colors 128 layer0-2.gif convert layer0-2.gif layer3.gif -composite +dither -colors 128 layer0-3.gif convert layer0-3.gif layer4.gif -composite +dither -colors 128 layer0-4.gif convert layer0-4.gif layer5.gif -composite +dither -colors 128 layer0-5.gif convert layer0-5.gif layer6.gif -composite +dither -colors 128 layer0-6.gif convert layer0-6.gif layer7.gif -composite +dither -colors 128 radar.gif # Create image for archive cp radar.gif radar-$(date +'%s').gif # Create animated radar image mkdir animation find radar-*.gif -mtime $animate_time -exec cp '{}' animation \; convert -delay 20 -loop 0 animation/radar-*.gif +dither -fuzz 25% -layers Optimize animation.gif # Clean up rm layer* rm -rf animation # If "never" isn't passed, delete radar images older than x if [ $delete_older_than != "never" ] ; then find radar-*.gif -mtime $delete_older_than -exec rm -f '{}' \; fi