This project is a real-time GPS tracking system designed to explore UDP server-client communication, packet parsing, database integration, and real-time data visualization. The system consists of multiple components working together to process and display GPS coordinates from simulated users.
- Simulates users by sending GPS coordinates as UDP packets.
- Uses IEEE 754 floating-point standard for representing latitude and longitude.
- Receives incoming packets from UDP clients.
- Parses the data using a custom Rust library that handles IEEE 754 floating-point numbers and custom endian handling.
- Stores processed coordinates in SurrealDB for near real-time access.
- Connects to SurrealDB and serves stored GPS data.
- Provides both WebSocket and RESTful endpoints for data retrieval.
- Ensures near real-time updates to connected clients.
- Displays users on a real-time map using OpenLayers.
- Fetches live GPS data from the backend API via WebSocket and REST endpoints.
- Focuses purely on real-time visualization (no historical tracking or geofencing).
✅ Efficient UDP-based GPS Data Transfer – Uses custom packets for optimized data exchange.
✅ Custom IEEE 754 Parsing & Endian Handling – Ensures precise coordinate interpretation.
✅ Near Real-Time Database (SurrealDB) – Enables fast data storage and retrieval.
✅ WebSocket & RESTful API – Provides flexible access for frontend clients.
✅ Live Map Visualization with OpenLayers – Displays user locations dynamically.
- Improve knowledge of UDP networking and packet-based communication.
- Explore Rust for high-performance server-side applications.
- Learn database interaction with SurrealDB.
- Implement real-time data streaming with WebSockets.
- Visualize geospatial data using OpenLayers in Vue.js.
surreal start --user root --pass root --bind 0.0.0.0:8080 rocksdb:gps.db
cargo build --release
./target/release/gps-tracker --config-path=config.toml
./target/release/gps-tracker-api --config-path=./config.toml
cd ui
yarn
yarn dev
Go to your browser then type:
http://localhost:5173
bash launch_clients.sh