High-availability platform for ingesting, processing, and visualizing real-time IoT vehicle telemetry Event-driven · Geospatial analytics · Time-series optimization
Fleet operators lack real-time visibility into vehicle locations, speed violations, and geofence breaches. This platform solves that by:
- 📡 Ingests 1,000+ events/sec from simulated vehicle fleets
- 🗺️ Real-time geofencing detection using PostGIS spatial functions
- ⏱️ Time-series optimized storage with TimescaleDB compression
- 📊 Live dashboard with dark mode and auto-refreshing markers
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Producer │───▶│ TimescaleDB │◀───│ ETL │───▶│ Geofence │ │ (Python) │ │ + PostGIS │ │ (Python) │ │ Detection │ │ IoT Fleet │ │ (Storage) │ │ (Consumer) │ │ ST_Contains │ └──────────────┘ └──────┬───────┘ └──────────────┘ └──────────────┘ │ ▼ ┌──────────────┐ ┌──────────────┐ │ FastAPI │───▶│ Leaflet │ │ (REST) │ │ (Frontend) │ │ GeoJSON │ │ Dark Mode │ └──────────────┘ └──────────────┘
text
Data flow:
- Producer simulates 50+ vehicles sending GPS pings (lat, lon, speed, timestamp)
- TimescaleDB + PostGIS stores time-series + geospatial data with hypertables
- ETL Consumer runs spatial queries (
ST_Contains) to detect geofence violations - FastAPI serves latest positions as GeoJSON
- Leaflet.js polls API every 2 seconds → updates map in real-time
| Layer | Technology | Purpose |
|---|---|---|
| Data Generation | Python + asyncio | Simulates vehicle fleet telemetry |
| Database | PostgreSQL 16 + PostGIS + TimescaleDB | Spatial + time-series hybrid storage |
| ETL Pipeline | Python (psycopg3) | Geofencing, data pruning, aggregations |
| API | FastAPI + Uvicorn | GeoJSON distribution, low-latency |
| Frontend | Leaflet.js + Tailwind/HTML5 | Real-time map dashboard |
| Orchestration | Docker Compose | Single-command infrastructure |
- Docker Desktop
- Python 3.12+
# 1. Clone
git clone https://github.com/KelvinW918/spatial-iot-platform.git
cd spatial-iot-platform
# 2. Start database (TimescaleDB + PostGIS)
docker-compose up -d
# 3. Install Python dependencies
pip install -r requirements.txt
# 4. Terminal 1: Start IoT simulation
python apps/simulator/producer.py
# 5. Terminal 2: Start ETL engine
python apps/etl_geofencing_summary.py
# 6. Terminal 3: Start API server
python apps/api_server.py
# 7. Open frontend
# Open apps/frontend/index.html in your browser
📊 Key Features
Real-time Geofencing
sql
-- Detect vehicles inside restricted zones
SELECT v.vehicle_id, v.speed, z.zone_name
FROM vehicle_telemetry v, geofence_zones z
WHERE ST_Contains(z.geometry, v.location)
AND v.speed > z.speed_limit
AND v.timestamp > NOW() - INTERVAL '5 seconds';
TimescaleDB Hypertable for Time-series
sql
-- Create hypertable for automatic partitioning
SELECT create_hypertable('vehicle_telemetry', 'timestamp');
-- Continuous aggregate for 1-minute summaries
CREATE MATERIALIZED VIEW vehicle_summary_1min
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 minute', timestamp) AS bucket,
vehicle_id,
AVG(speed) as avg_speed,
ST_Centroid(ST_Collect(location)) as avg_location
FROM vehicle_telemetry
GROUP BY bucket, vehicle_id;
Data Pruning (Automatic Retention)
sql
-- Keep only last 24 hours of raw data
SELECT remove_chunks(
older_than => INTERVAL '24 hours',
table_name => 'vehicle_telemetry'
);
📈 Performance Characteristics
Metric Value
Ingestion rate 1,000+ events/sec
API latency (p95) < 30ms
Spatial query time < 5ms (with GIST index)
Storage compression 90% (TimescaleDB)
Concurrent vehicles 10,000+
🗂️ Project Structure
text
spatial-iot-platform/
├── apps/
│ ├── api_server.py # FastAPI GeoJSON endpoint
│ ├── etl_geofencing_summary.py # Pipeline, spatial rules, pruning
│ ├── frontend/
│ │ └── index.html # Leaflet dashboard (dark mode)
│ └── simulator/
│ ├── producer.py # IoT event injector
│ └── consumer.py # Analytics consumer
├── database/
│ └── init.sql # DDL, hypertables, spatial indexes
├── docker-compose.yml # TimescaleDB + PostGIS
├── requirements.txt # Dependencies
└── .gitignore
🔮 Roadmap
WebSocket support (replace polling)
Redis caching for hot partitions
Kafka as ingestion buffer
ML anomaly detection on speed patterns
PWA for mobile fleet managers
👤 Author
Kelvin W.
Systems Engineer · Product Architect
GitHub · LinkedIn
📄 License
MIT
<div align="center"> ⭐ Star this repo if you work with IoT or geospatial data ⭐ </div> ```