#!/usr/bin/perl # Used to convert simple long by lat data into NMEA format. # Data available from: # (URL: http://crusty.er.usgs.gov/coast/getcoast.html ) $Time = 0; while (<>) { if (/^#/) { $NMEA = "GPGGA,999999,0000.0000,N,00000.0000,W,3,0,0.0,0,M,,,,"; print "\$" . $NMEA . "*" . &NMEAChecksum($NMEA) . "\n"; next; } s/^(-{0,1})(\d+)(\.\d+)\s+(-{0,1})(\d+)(\.\d+)//; $LatMin = $6 * 60; $LongMin = $3 * 60; $NMEA = sprintf("GPGGA,%06d,%02d%07.4f,%s". ",%03d%07.4f,%s,1,3,0.0,0,M,,,,", $Time, $5, $LatMin, $4 eq "-" ? "S" : "N", $2, $LongMin, $1 eq "-" ? "W" : "E" ); print "\$" . $NMEA . "*" . &NMEAChecksum($NMEA) . "\n"; $Time++; } sub NMEAChecksum { local ($Str) = @_; local ($CS) = (0); while ($Str =~ s/(.)//) { $CS = $CS ^ unpack("%C", $1); } return sprintf("%02x", $CS); }