I didn’t realize until running across this article that the basis for most GPS unit output started with a marine standard – NMEA 0183. Nor did I realize how poorly suited the protocol is for a lot of what people now use GPS units for. Even nautical uses.
If you’re interested in GPS, navigation and especially bits and bytes of computer protocols, you might find this worth a read.
The protocol used by GPS devices to report to computers is a small subset of NMEA 0183. NMEA stands for "National Marine Electronics Association", and the features GPSes use for reporting time/position/velocity information are a small part of a protocol originally designed for communication between parts of complex marine navigation systems. Thus the full protocol includes support for depth sounders, LORAN, and many other things irrelevant to a modern GPS.\
The lowest level of NMEA 0183 is quite sensibly designed. The protocol consists of sentences, each led by a dollar sign and an identifying text tag, followed by multiple comma-separated textual fields, ended by an asterisk, a checksum, and LF/CR. This is a simple, clean format with good extensibility, easy to parse and generate. It is well adapted to its job, which is to pass small amounts of numeric and status information. The textual format makes it easy to log NMEA sessions, edit them, and play them back â€” a substantial advantage in developing talker and parser software.\
Unfortunately, the good news ends there. The design of the upper layers of NMEA 0183 is patchy, kludgy, and replete with the kind of errors that arise from growth by accretion rather than forethought.