High-Precision GNSS Survey System

Published at 1/14/2026

#Python
#Geodesy
#FastAPI
#Real-Time Systems
#Programming
#Personal

Overview

JAHRTK2 is a dual-node GNSS system (Base + Rover) designed to bring Survey Grade Accuracy (2 cm) to affordable hardware (Quectel LC29H).

This was my first major Python project, used to learn the ecosystem while solving a complex real-world problem: accurately mapping my property and staking out site plans for buildings, driveways, and septic systems.

Technical Architecture

Unlike typical “hobbyist” setups that simply pipe NMEA data, JAHRTK2 uses a “Base-as-Service” architecture. The Base station runs 24/7 as a headless service, providing RTCM3 corrections to any connected Rover.

  • Core: Python Monolith using FastAPI and Asyncio to handle high-frequency data streams.
  • Infrastructure: Dockerized deployment using custom udev rules for stable hardware binding.
  • Data Flow: Event-sourced messaging via in-memory queues, decoupling hardware drivers from the UI.
System Control UI
*System Control UI showing the reloadable modules of this system.*

The “Rigorous Geodesy” Pipeline

The heart of the system is a 5-step conversion pipeline. This is critical because GPS satellites speak a different “language” than professional maps:

  • The Problem: Satellites use ITRF2020 (Current Epoch), but maps use NAD83 (2011). Tectonic drift creates a ~40cm discrepancy.
  • The Solution:
    1. ECEF Conversion: Linear Cartesian math to avoid spherical distortion.
    2. Epoch Rewinding: Using PROJ to shift coordinates back to 2010.0.
    3. Orthometric Projection: Applying Geoid18 for accurate sea-level heights.
    4. Statistical Verification: ISO 17123-8 standard validation using 3-Sigma filtering.

Operational Reality

The entire system is operated via a responsive web interface, allowing for real-time operation from multiple mobile devices or laptops while in the field.

Precision Validation
Survey Mode UI
*Validating system precision and repeatability against a NGS monument.*

Below is an example of mapping information created using this system in QGIS. Each red dot represents a collected point; these were used to generate the blue 1-ft elevation contour lines, helping to visualize the area’s topography.

1ft Contours
*1-ft contours of my property generated using this system.*

Navigation mode allows the user to navigate to a specific point, line, or area, so that features designed in GIS software can be accurately staked out in the field.

Point Navigation
Line Navigation
Area Navigation

Three different navigation modes to help go from GIS software to field layouts.

Base Station Monitoring

The base station UI provides a dashboard of real-time statistics to be able to visually confirm the stability of the base station.

Base Monitoring
Base Live Satellite View
*Real-time base station stability monitoring UI.*

Complexity & Challenges

  • Concurrency: Overcoming GIL limitations and asyncio loop starvation to ensure millisecond-precise processing of 10Hz GNSS frames.
  • Traceability: Every point carries a “Geodetic Receipt”—a raw log of the ECEF vectors and base stability at the time of capture, allowing for forensic verification years later.
  • Reliability: Implemented a “Hot-Reload” task manager that allows individual hardware drivers to restart without interrupting the web server or active telemetry.

Project Resources

Judson Hartley © 2023-2026