# radar.ps1 - NWS Radar Image Compositing # Example usage: .\radar.ps1 ILN 1 1 # $Author: jeffr $ # $Date: 2020-04-30 08:05:24 -0400 (Thu, 30 Apr 2020) $ # $Revision: 8 $ # # Get config variables # If ($args.Length -ne 3) { Write-Host 'Usage .\radar.ps1 {radar ID} {animation period in hrs} {delete after x hrs|never}' Exit 1 } $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? If ($radar_ids.IndexOf($args[0]) -lt 0) { Write-Host 'Radar ID not found. Valid radar IDs include:' Write-Host $radar_ids Write-Host 'Refer to https://www.weather.gov/jetstream/ridge_download' Write-Host 'Quitting.' Exit 1 } # Radar ID $radar_id = $args[0] # Time period to animate $animate_time = 0 - $args[1] # Delete files older than If ($args[2] -ne 'never' ) { $delete_older_than = 0 - $args[2] } else { $delete_older_than = 'never' } # Get the radar image layers $layer_0 = 'https://radar.weather.gov/Overlays/Topo/Short/' + $radar_id + '_Topo_Short.jpg' $layer_1 = 'https://radar.weather.gov/RadarImg/N0R/' + $radar_id + '_N0R_0.gif' $layer_2 = 'https://radar.weather.gov/Overlays/County/Short/' + $radar_id + '_County_Short.gif' $layer_3 = 'https://radar.weather.gov/Overlays/Rivers/Short/' + $radar_id + '_Rivers_Short.gif' $layer_4 = 'https://radar.weather.gov/Overlays/Highways/Short/' + $radar_id + '_Highways_Short.gif' $layer_5 = 'https://radar.weather.gov/Overlays/Cities/Short/' + $radar_id + '_City_Short.gif' $layer_6 = 'https://radar.weather.gov/Warnings/Short/' + $radar_id + '_Warnings_0.gif' $layer_7 = 'https://radar.weather.gov/Legend/N0R/' + $radar_id + '_N0R_Legend_0.gif' # Get the radar image layers Invoke-WebRequest $layer_0 -OutFile w-0.jpg Invoke-WebRequest $layer_1 -OutFile w-1.gif Invoke-WebRequest $layer_2 -OutFile w-2.gif Invoke-WebRequest $layer_3 -OutFile w-3.gif Invoke-WebRequest $layer_4 -OutFile w-4.gif Invoke-WebRequest $layer_5 -OutFile w-5.gif Invoke-WebRequest $layer_6 -OutFile w-6.gif Invoke-WebRequest $layer_7 -OutFile w-7.gif # Stack the image layers magick.exe convert w-0.jpg w-1.gif -composite +dither -colors 128 l-1.gif magick.exe convert l-1.gif w-2.gif -composite +dither -colors 128 l-2.gif magick.exe convert l-2.gif w-3.gif -composite +dither -colors 128 l-3.gif magick.exe convert l-3.gif w-4.gif -composite +dither -colors 128 l-4.gif magick.exe convert l-4.gif w-5.gif -composite +dither -colors 128 l-5.gif magick.exe convert l-5.gif w-6.gif -composite +dither -colors 128 l-6.gif magick.exe convert l-6.gif w-7.gif -composite +dither -colors 128 radar.gif # Radar image filename $radar_img = 'radar-' + (Get-Date -UFormat %s) + '.gif' # Create image for archive Copy-Item 'radar.gif' -Destination $radar_img # Create animated radar image New-Item -Path 'animation' -ItemType Directory -Force | Out-Null Get-ChildItem radar-* | Where-Object {$_.LastWriteTime -gt (Get-Date).AddHours($animate_time)} | Copy-Item -Destination 'animation' magick.exe convert -delay 20 -loop 0 animation/radar-*.gif +dither -fuzz 25% -layers Optimize animation.gif # Clean up Remove-Item 'w-*', 'l-*', 'animation\*.gif', 'animation' # Delete files older than specified If ($delete_older_than -ne 'never' ) { Get-ChildItem radar-* | Where-Object {$_.LastWriteTime -lt (Get-Date).AddHours($delete_older_than)} | Remove-Item } Exit 0