Estimating the Delhi Metro in 3D

*Track heights aren’t published. I estimated them for all 272 stations from five surveyed anchors, terrain data and engineering priors, with a range on every point.*

**Summary:** An explorable 3D model of the Delhi Metro. Track heights for 272 stations are estimated from five known points, satellite terrain data and structure-class priors with shape-preserving interpolation, and every point carries a range.

**Status:** Live. **Year:** 2026. **Role:** Data engineering, modelling and visualisation. **Tags:** Estimation, Interpolation, Geospatial, deck.gl

---

The problem Metro maps are flat, but trains run on viaducts about 10 m above the street and in tunnels as deep as 40 m below it, and DMRC doesn’t publish the heights. Only five reliable rail heights are on record, from an audit report and DMRC drawings, for 272 stations.

The estimator ```math {h_{\text{rail}}(s) = h_{\text{ground}}(s) + \delta_{c(s)}},\qquad{\delta_c \in \big[\delta_c^{\min},\ \delta_c^{\max}\big]} ``` *Along the route s: terrain from the Copernicus 90 m elevation model, plus an offset prior for the structure class c at that point (viaduct about +10 m, tunnel about -16 m), each with its own range.*

```math p(s) = h_k H_{00}(\tau) + \Delta_k m_k H_{10}(\tau) + h_{k+1} H_{01}(\tau) + \Delta_k m_{k+1} H_{11}(\tau) ``` *The rail curve is a PCHIP interpolant: piecewise cubic Hermite in \tau = (s - s_k)/\Delta_k, exact at the surveyed anchors.*

```math {\frac{w_1 + w_2}{m_k} = \frac{w_1}{d_{k-1}} + \frac{w_2}{d_k}},\qquad{m_k = 0 \ \text{ if } d_{k-1} d_k \le 0} ``` *Background: PCHIP slopes are weighted harmonic means of the neighbouring secant slopes d, and zero at local extrema, so the curve never overshoots between known points.*

*Interactive figure: Track height along one line: the ground, the best estimate and its range. Pick a line.*

Confidence Every point carries a best estimate, a lower and an upper bound, and a label: exact at the anchors, strongly or weakly constrained elsewhere. Most of the network is weakly constrained, and the map says so instead of hiding it.

![Tilted 3D view of the metro network in the app](/figures/delhi-metro/screenshot-3d-tilt.webp) *The full app runs in the browser with no server. Viaducts climb above the terrain; deep tunnels dip below it.*

  • [Open the 3D map](/visualizers/delhi-metro-3d/)