# NMEA to CSV

Convert raw NMEA 0183 GPS/GNSS sentences into a timestamped CSV track with latitude, longitude, altitude, speed, course and fix quality.

## Run it

- **CLI:** `gizza tool nmea-to-csv '$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A'`
- **Web:** https://gizza.ai/tools/nmea-to-csv/
- **Agents:** machine-readable descriptor (parameters JSON Schema) at https://gizza.ai/tools/nmea-to-csv/tool.json

## Inputs

- `nmea` — NMEA log _(field)_
- `coordinates` — Coordinate format _(field)_
- `altitude_unit` — Altitude unit _(field)_
- `speed_unit` — Speed unit _(field)_
- `delimiter` — Delimiter _(field)_
- `header` — Header row _(field)_
- `validate_checksum` — Validate checksum _(field)_

## Output

- CSV track (text)

## Query parameters

Open the tool pre-filled and auto-run via URL:

- `nmea` — NMEA log
- `coordinates` — Coordinate format
- `altitude_unit` — Altitude unit
- `speed_unit` — Speed unit
- `delimiter` — Delimiter
- `header` — Header row
- `validate_checksum` — Validate checksum

Example: `https://gizza.ai/tools/nmea-to-csv/?nmea=%24GPGGA%2C123519%2C4807.038%2CN%2C01131.000%2CE%2C1%2C08%2C0.9%2C545.4%2CM%2C46.9%2CM%2C%2C%2A47%0A%24GPRMC%2C123519%2CA%2C4807.038%2CN%2C01131.000%2CE%2C022.4%2C084.4%2C230394%2C003.1%2CW%2A6A&coordinates=decimal&altitude_unit=m&speed_unit=knots&delimiter=comma&header=true&validate_checksum=true`

---

## Convert NMEA GPS logs to CSV

Paste raw NMEA 0183 GPS/GNSS sentences and convert them into a spreadsheet-ready CSV track. The
converter accepts common `$GPGGA`, `$GNRMC`, `$GPGLL`, `$GPVTG`, `$GPZDA`, and `$GPGSA` sentences
from any talker prefix, then merges sentences that share the same UTC time into one row.

The output includes time or ISO timestamp, latitude, longitude, altitude, fix quality, satellite
count, HDOP, speed, and course. Choose decimal degrees or DMS coordinates, metres or feet, knots,
km/h or mph, comma/semicolon/tab/pipe delimiters, and whether to keep a header row. Enable checksum
validation when you want lines with a bad `*XX` checksum dropped.

## Worked example

Input:

```text
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
```

Default output:

```csv
timestamp,time,latitude,longitude,altitude_m,fix,satellites,hdop,speed_knots,course
1994-03-23T12:35:19Z,12:35:19,48.1173,11.516667,545.4,gps,8,0.9,22.4,84.4
```

## Limits and edge cases

- This is a CSV converter, not a map viewer or GPX/KML generator.
- GSV satellite-in-view details are not emitted; only GGA satellite count and HDOP are included.
- Proprietary vendor sentences are ignored unless they use one of the supported NMEA sentence types.
- When checksum validation is enabled, sentences with an invalid checksum are skipped; lines without a
  checksum are still parsed.
- Rows require a latitude and longitude from GGA, RMC, or GLL. Speed-only VTG lines do not produce rows
  by themselves.

## FAQ

<details>
<summary>Which NMEA sentences are supported?</summary>

The converter reads GGA, RMC, GLL, VTG, ZDA, and GSA sentences. It accepts common talker prefixes such
as `GP`, `GN`, `GL`, `GA`, and `GB` because the sentence type is the last three characters before the
first comma.

</details>

<details>
<summary>How are multiple sentences merged into one CSV row?</summary>

Sentences with the same UTC time-of-day are treated as one cycle. For example, GGA supplies altitude,
fix quality, satellite count, and HDOP, while RMC supplies date, speed, and course for the same point.

</details>

<details>
<summary>What happens when a date is missing?</summary>

If RMC or ZDA provides a date, the CSV includes an ISO `timestamp` column. If the log only has time-only
sentences such as GGA, the timestamp column is omitted and the `time` column remains.

</details>

<details>
<summary>Should I enable checksum validation?</summary>

Enable it for recorded logs where the trailing `*XX` checksum is present and you want corrupt lines
dropped. Leave it off when pasting logs from devices or examples that omit checksums.

</details>

## Related tools

- [GPX Privacy Scrubber](https://gizza.ai/tools/gpx-privacy-scrubber/): Scrub a GPX file before sharing it: remove or fuzz start/end locations, rewrite timestamps, and strip sensor extensions. Runs locally in your browser.
- [Convert OwnTracks Exports to GPX](https://gizza.ai/tools/owntracks-to-gpx/): Convert OwnTracks JSON or Recorder .rec exports into GPX 1.1 tracks with timestamps, elevation, segments, and optional OwnTracks extensions.
- [Beancount to CSV Converter](https://gizza.ai/tools/beancount-to-csv/): Flatten Beancount or Ledger journal postings into spreadsheet-ready CSV, then rebuild a simple journal from that flat CSV schema.
- [CSV Cell Diff](https://gizza.ai/tools/csv-cell-diff/): Compare two CSVs column-by-column and highlight every individual cell that changed, plus added and removed rows and columns.
- [Fuzzy Name Matcher](https://gizza.ai/tools/fuzzy-name-matcher/): Match and deduplicate person or organization names with Jaro-Winkler, Levenshtein and Soundex. Paste names, tune the threshold, export groups, pairs, CSV or JSON.
