Skip to content

GNSS Tools

A collection of tools for GNSS, RTK, and coordinate work.

I’ve been running a personal RTK base station and a DIY rover for a few years just for fun.
While contributing to OpenStreetMap, I needed a tool for coordinate conversion—and I eventually got carried away, building a complete suite of tools for future use.

Coordinate Converter

Converts between common geodetic and projected coordinate reference systems used in Denmark and Europe.
Please note that the calculations might differ in the final decimal place. Different tools use different rounding method, we are using the PROJ conversions here.

Ellipsoidal → DVR90 Height

Your GNSS receiver usually reports ellipsoidal height — the distance above the WGS84 mathematical ellipsoid, not above sea level. Denmark's official vertical datum DVR90 (2023) follows the geoid, which approximates mean sea level.

Height above the WGS84 ellipsoid. Shown as HAE, ellipsoidal height, or WGS84 height on survey receivers and RTK systems.

Decimal Degrees ↔ DMS

For DMS input use any common format: 55°40'34.03"N, 55 40 34.03 N, or 55 40 34.03.

Distance & Bearing

Geodetic distance and bearing between two WGS84 points (Vincenty formula, accuracy ±0.5 mm).

NTRIP Caster Tester

Generates curl commands ready to run from a terminal. Browsers can't connect to most NTRIP casters directly (CORS + HTTP/0.9), so this is the practical alternative.

For RTCM stream capture, the generated command pipes the output through xxd to produce hex — paste that hex straight into the RTCM Message Analyzer below.

NTRIP 1.0 casters respond with SOURCETABLE 200 OK instead of a standard HTTP status line, which curl rejects by default. The --http0.9 flag in the generated commands handles this.

RTCM Message Analyzer

Paste an RTCM 3.x stream as a hex string (or base64) to see which message types it contains. Useful when diagnosing what correction data a base station or NTRIP caster is actually sending — and whether it matches what your rover expects.

Capture RTCM bytes from a serial log, str2str, Wireshark, or your GNSS receiver's debug output and paste the hex dump here.

NMEA Sentence Parser

Paste one or more NMEA sentences to decode them. Supports GGA, RMC, GSA, GLL, VTG, GSV.

RTK Base Station Correction

When your RTK base is placed at an assumed or approximate position, all rover measurements carry that same offset error.

How it works: Measure a known survey point with your rover.
Enter the base current configured assumed position, the true survey point coordinates, and your rover measurement of that survey point.
The tool calculates the position offset and outputs corrected base coordinates. Enter those into your base, and all future rover measurements should be accurate.

Lat Lon [Height] — space-separated, WGS84 decimal degrees
Lat Lon [Height] — from official source
Lat Lon [Height] — what your rover actually measured at the survey point

Apply Position Offset to Data

After correcting a base station, apply the exact same lat/lon offset across a whole file — GeoJSON, KML, XML, CSV, or any other text-based coordinate format — in one pass.

How it works: Paste the file, enter the offsets from the RTK correction above or somewhere else, and set the minimum decimal place count that distinguishes coordinate values from heights or other numbers. The tool scans for every matching number, groups them into latitudes and longitudes by value range, then writes the corrected output.

Numbers with fewer decimals than the threshold, or outside both lat/lon ranges (e.g. heights 0–100 m), are skipped. Defaults cover Denmark.

I only made 1 of the tools on here, then figured out LLM was faster anyway if we ignore the disagreements that took hours.