| name | rail-lidar-qa-mvp |
| description | Rail LiDAR QA MVP - Local LiDAR quality validation for railway infrastructure using drone simulation, point cloud metrics, and 3D visualization. |
| version | 1 |
| created | 2026-05-30T00:00:00.000Z |
| updated | 2026-05-30T00:00:00.000Z |
| source | https://github.com/Ntizar/rail-lidar-qa-mvp |
| tags | ["data-science","lidar","railway","QA"] |
Rail LiDAR QA MVP
Overview
A local tool for validating LiDAR quality on railway infrastructure. Simulates drone flights over a PNOA LiDAR point cloud to detect coverage gaps, low-density zones, and shadow areas.
Workflow
- User loads
.laz point cloud file
- System reads point cloud and calculates general metrics
- User selects analysis zone (e.g., 20m track + embankment)
- Tool divides zone into 2D grid
- For each cell: calculates density, elevation range, coverage
- Simulates multiple drone passes from different positions
- Generates QA map with color coding
- Demo shows if capture is acceptable or needs repetition
Drone Pass Strategy
| Pass | Coverage | Purpose |
|---|
| P1 | Track axis | Global view of platform, track, ballast, embankment |
| P2 | Right flank | Reduce shadows on embankment face, ditch, ballast edge |
| P3 | Left flank | Confirm doubtful zones, improve density continuity |
| P4 | Adaptive (optional) | Target red cells after P1-P3 |
QA Traffic Light
- Green: Sufficient density and continuous coverage
- Yellow: Partial coverage, irregular density, needs review
- Red: Gap, shadow, low density, insufficient capture
Minimum Metrics
- Total point count
- Bounding box X/Y/Z
- Elevation range
- Mean points per square meter
- Green cell percentage
- Yellow cell percentage
- Red cell percentage
- QA score 0-100
Math Model
eje_via = principal_eigenvector(covariance(X, Y))
s = longitudinal projection on eje_via
d = transverse projection on normal_via
Error reduction per pass:
e_i,k+1 = max(e_floor, e_i,k * (1 - g_k * visibility_i,k)) + anomaly_i
Planner prioritizes cells with highest residual error for adaptive P4.
Tech Stack
- Python:
laspy, lazrs (LAZ reading), numpy (grid metrics)
- Three.js: 3D point cloud visualization
- Local HTTP server (Python stdlib)
- Windows launcher (
run_mvp.bat)
Color Classification
Points are classified visually:
- Green: Vegetation (high NIR response)
- Dark gray: Track/platform
- Ochre: Ballast/substructure
- Brown: Natural terrain/embankment
- Dark blue: Shadow/occlusion/water
European Sovereignty Narrative
- Galileo Open Service as GNSS base
- Galileo HAS for PPP high-precision corrections
- EGNOS for operational integrity layer
- Local processing, no external cloud
- PNOA LiDAR (CNIG) as free base data
Static Demo Generation
python src\build_static.py
Creates docs/ with Three.js viewer, preprocessed sample_analysis.json, and HTML report. Publishable to GitHub Pages or Vercel without uploading the .laz file.
Pitfalls
- MVP uses heuristic rules, not real AI
- Track detection may be manual or configurable in v1
- Precision depends on sensor, GNSS, IMU, calibration, and pass geometry
- Tool does NOT certify railway safety