#! /usr/bin/perl use WXP; WXP::Prog::readResrcFile; sub xprint { my($tag,$val) = @_; print " $tag=\"$val\""; } $sfc = 1; $syn = 0; if( $ARGV[0] eq "-s" ){ $sheader = 1; shift; } if( $ARGV[0] eq "-syn" ){ $syn = 1; $sfc = 0; shift; } if( $sheader ){ print "\n"; } else { print "\n"; print "\n"; } print "\n"; $filename = new WXP::Filename( "sfc_cvt", "la" ); $sfile = new WXP::SfcFile( $filename->getName ); print "getName."\"/>\n"; $sdata = new WXP::SfcData; $date = new WXP::Date; $str = new WXP::String; while( $sfile->read( $sdata )){ print "getId; $sdata->getDate( $date ); $date->toText( "%Y-%m-%dT%H:%M:00Z", $str ); xprint "time", $str->get; $cldcv = $sdata->getCldCover; $cldcv = "CLR" if $cldcv eq "C"; $cldcv = "FEW" if $cldcv eq "F"; $cldcv = "SCT" if $cldcv eq "S"; $cldcv = "BKN" if $cldcv eq "B"; $cldcv = "OVC" if $cldcv eq "O"; $cldcv = "OVC" if $cldcv eq "8"; $cldcv = "BKN" if $cldcv eq "5" || $cldcv eq "6" || $cldcv eq "7"; $cldcv = "SCT" if $cldcv eq "2" || $cldcv eq "3" || $cldcv eq "4"; $cldcv = "FEW" if $cldcv eq "1"; $cldcv = "CLR" if $cldcv eq "0"; $sdata->weatherText( $str ); $txtwx = $str->get; $cwx = ""; $cwx = "SU" if( $cldcv =~ /CLR/ ); $cwx = "CL" if( $cldcv =~ /OVC/ ); $cwx = "PC" if( $cldcv =~ /FEW/ ); $cwx = "PC" if( $cldcv =~ /SCT/ ); $cwx = "PC" if( $cldcv =~ /BKN/ ); $cwx = "FG" if( $cldcv =~ /X/ ); $cwx = "FG" if( $txtwx =~ /fog/ ); $cwx = "RA" if( $txtwx =~ /rain/ ); $cwx = "RA" if( $txtwx =~ /drizzle/ ); $cwx = "SN" if( $txtwx =~ /snow/ ); $cwx = "TS" if( $txtwx =~ /thunder/ ); if( $cwx ){ xprint "wx.code", $cwx; } if( $sdata->getT != WXP::MISS ){ xprint "temp.C", sprintf "%.1f", $sdata->getT; } if( $sdata->getTd != WXP::MISS ){ xprint "dewpt.C", sprintf "%.1f", $sdata->getTd; } $rhum = WXP::Calc::relHum( $sdata->getT, $sdata->getTd ); if( $rhum != WXP::MISS ){ xprint "rhum", sprintf "%.0f", $rhum; } $wdir = $sdata->getDir; $dirstr = "N" if $wdir < 15 || $wdir > 345; $dirstr = "NNE" if $wdir > 15 && $wdir < 35; $dirstr = "NE" if $wdir > 35 && $wdir < 55; $dirstr = "ENE" if $wdir > 65 && $wdir < 75; $dirstr = "E" if $wdir > 75 && $wdir < 105; $dirstr = "ESE" if $wdir > 105 && $wdir < 125; $dirstr = "SE" if $wdir > 125 && $wdir < 145; $dirstr = "SSE" if $wdir > 145 && $wdir < 165; $dirstr = "S" if $wdir > 165 && $wdir < 195; $dirstr = "SSW" if $wdir > 195 && $wdir < 215; $dirstr = "SW" if $wdir > 215 && $wdir < 235; $dirstr = "WSW" if $wdir > 235 && $wdir < 255; $dirstr = "W" if $wdir > 255 && $wdir < 285; $dirstr = "WNW" if $wdir > 285 && $wdir < 305; $dirstr = "NW" if $wdir > 305 && $wdir < 325; $dirstr = "NNW" if $wdir > 325 && $wdir < 345; if( $wdir != WXP::MISS ){ xprint "wind_dir.deg", sprintf "%d", $wdir; xprint "wind_dir", $dirstr; xprint "wind_spd.knt", sprintf "%d", $sdata->getSpd; } if( $sdata->getGust != WXP::MISS ){ xprint "wind_gust.knt", sprintf "%d", $sdata->getGust; } $wchill = WXP::Calc::windChillTemp2( WXP::CtoK($sdata->getT), $sdata->getSpd ); if( $wchill != WXP::MISS && $wchill < 283 ){ xprint "wind_chill.C", sprintf "%d", WXP::KtoC($wchill); } $heat = WXP::Calc::heatIndex( WXP::CtoK($sdata->getT), WXP::CtoK($sdata->getTd )); if( $heat != WXP::MISS && $heat > 293 ){ xprint "heat_index.C", sprintf "%d", WXP::KtoC($heat); } if( $sdata->getSlp != WXP::MISS ){ xprint "pressure.mb", sprintf "%.1f", $sdata->getSlp; } if( $sdata->getAlt != WXP::MISS ){ xprint "alt_setting.in", sprintf "%.2f", $sdata->getAlt; } if( $sdata->getVis != WXP::MISS ){ xprint "visibility.mi", sprintf "%d", $sdata->getVis; } if( $cldcv ne "M" && $cldcv ne " " ){ xprint "cloud_cover", $cldcv; } if( $sdata->getCldHeight != WXP::MISS ){ xprint "cloud_ceil.ft", sprintf "%d", $sdata->getCldHeight; } $skies = ""; $skies = "cloudy" if $cldcv eq "OVC"; $skies = "mostly cloudy" if $cldcv eq "BKN"; $skies = "partly cloudy" if $cldcv eq "SCT"; $skies = "mostly clear" if $cldcv eq "FEW"; $skies = "clear" if $cldcv eq "CLR"; $skies = "obscured" if $cldcv eq "X"; if( $skies ){ xprint "skies", $skies; } if( $txtwx ){ xprint "wx.text", $txtwx; } if( $sdata->getPrec != WXP::MISS ){ xprint "prec.in", sprintf "%.2f", $sdata->getPrec; } if( $sdata->getSnowCov != WXP::MISS ){ xprint "snow_depth.in", sprintf "%d", $sdata->getSnowCov; } print "/>\n"; } print "\n";