User Rating 0.0 โ˜…โ˜…โ˜…โ˜…โ˜…
Total Usage 0 times
Drop your .CSV file here or click to browse Columbus V900 / V990 GPS logger files supported (max 50 MB)
Is this tool helpful?

Your feedback helps us improve.

โ˜… โ˜… โ˜… โ˜… โ˜…

About

Columbus V900 and V990 GPS data loggers export track data in a non-standard CSV format. Coordinates are encoded in DDMM.MMMM notation rather than decimal degrees. Timestamps are split across two columns (DATE as YYMMDD, TIME as HHMMSS) with no ISO 8601 compliance. Importing this raw data into GIS software, mapping APIs, or analysis pipelines without conversion produces incorrect positions and broken time series. A latitude value of 4547.4659 in the raw file actually represents 45.791098ยฐ decimal. This tool parses the proprietary CSV structure, converts coordinates to standard decimal degrees with correct hemisphere sign from the N/S and E/W flag columns, merges date and time into Unix millisecond timestamps and ISO 8601 strings, and outputs clean JSON objects or corrected CSV. It handles both V900 (basic: INDEX, TAG, DATE, TIME, LAT, N/S, LON, E/W, HEIGHT, SPEED, HEADING, VOX) and V990 extended format (adds FIX MODE, VALID, PDOP, HDOP, VDOP, DISTANCE columns).

Limitations: the tool assumes the device clock was set correctly. GPS altitude (HEIGHT) is ellipsoidal height, not orthometric. Accuracy degrades in the raw data itself under poor satellite geometry (high PDOP values on V990). The parser tolerates minor formatting inconsistencies (trailing commas, BOM bytes, mixed line endings) but expects the standard Columbus header row to be present in the file.

columbus v900 v990 gps csv converter csv fixer gps logger coordinate converter csv to json gps data

Formulas

The core conversion transforms DDMM.MMMM notation into standard decimal degrees. Given a raw latitude value Lraw in DDMM.MMMM format:

lat = floor(Lraw100) + Lraw mod 10060

If the hemisphere flag is S (south) or W (west), the result is negated:

lat = lat ร—
{
โˆ’1 if flag = S or W1 otherwise

Timestamp construction merges DATE (YYMMDD) and TIME (HHMMSS):

year = 2000 + parseInt(DATE[0:2])
month = parseInt(DATE[2:4]) โˆ’ 1
day = parseInt(DATE[4:6])
time = Date.UTC(year, month, day, HH, MM, SS)

Where time is the Unix timestamp in milliseconds, and isoTime is its ISO 8601 representation without timezone suffix (matching device-local assumption). The same longitude formula applies with DDDMM.MMMM (three degree digits instead of two), handled identically by the floor division.

Reference Data

FieldV900V990Raw FormatFixed OutputUnit
INDEXIntegerInteger -
TAGSingle char (T/G/V/C)Single char -
DATEYYMMDD (e.g. 120905)Merged into time & isoTime -
TIMEHHMMSS (e.g. 092753)Merged into time & isoTime -
LATITUDEDDMM.MMMM (e.g. 4547.4659)Decimal degrees (e.g. 45.791098)ยฐ
N/SN or SSign applied to latitude -
LONGITUDEDDDMM.MMMM (e.g. 01101.0754)Decimal degrees (e.g. 11.017924)ยฐ
E/WE or WSign applied to longitude -
HEIGHTIntegerIntegerm
SPEEDIntegerIntegerkm/h
HEADINGInteger (0 - 360)Integerยฐ
VOXInteger or filenameInteger or string -
FIX MODE2D/3D/DGPSString -
VALIDSPS/DGPS/ESTString -
PDOPFloatFloat -
HDOPFloatFloat -
VDOPFloatFloat -
DISTANCEFloatFloatm
Tag values: T = Trackpoint, G = Waypoint (button press), V = Voice memo, C = POI

Frequently Asked Questions

Detection is automatic based on the header row. The V900 header contains 12 columns (INDEX through VOX). The V990 header contains 18 columns, adding FIX MODE, VALID, PDOP, HDOP, VDOP, and DISTANCE after VOX. The parser counts the number of header fields and selects the appropriate column mapping. If neither standard header is found, the tool reports an error.
Columbus loggers encode coordinates in DDMM.MMMM (degrees and decimal minutes) format, not decimal degrees. A raw value of 4547.4659 means 45 degrees, 47.4659 minutes. Treating it as 4547.4659 degrees places the point off the Earth. The correct decimal degree value is 45 + (47.4659 รท 60) = 45.791098ยฐ. This tool performs that conversion automatically.
Yes. Some Windows text editors and Columbus software versions prepend a BOM (\uFEFF) to the CSV file. The parser strips any leading BOM character before processing the header row, preventing field name mismatches.
The tool parses and outputs all points regardless of PDOP. However, points with PDOP above 6.0 generally indicate poor satellite geometry and degraded position accuracy. The output preserves the PDOP value so downstream filtering can be applied. The tool does not discard any data points.
Columbus V900/V990 loggers record GPS time, which is UTC. The tool constructs timestamps using Date.UTC() and outputs ISO 8601 strings without a timezone offset suffix, treating all times as UTC. If your logger was configured with a local time offset, you would need to adjust the output accordingly.
The tool processes files up to 50 MB in the browser. A typical V900 CSV with 100,000 trackpoints is approximately 8 MB. For files exceeding 5 MB, parsing runs asynchronously in chunked batches to prevent UI freezing. Files beyond 50 MB are rejected with an error notification.
The output is a flat JSON array of point objects with standard decimal-degree latitude and longitude fields. To use with GeoJSON, you would wrap each point as a Feature with Point geometry. The field names (latitude, longitude, altitude) are compatible with most mapping libraries. The tool does not output GeoJSON directly, but the conversion is a trivial structural mapping.