Zürich Cooles Routing is a CAS GIS ETH Zürich project by Marco Pizzolato and Markus Sutter. The project focuses on setting up geospatial routing infrastructure and exploring dynamic routing. Shadow was used as the dynamic environmental information.
The shown shadow exposure represents a hypothetical clear-sky situation with maximum possible sun exposure. It does not account for clouds, haze, temporary objects, or seasonal vegetation changes.
Technical infrastructure. The application is based on PostgreSQL/PostGIS, pgRouting, PostgREST and OpenLayers.
The route is calculated by minimizing a custom edge cost. Each walkway segment receives a cost based on walking time and sun/shadow comfort.
$$ t = \lambda \, t_{move} + (1-\lambda) \, t_{shadow} $$In simple words:
Walking speed is estimated with Tobler’s hiking function. Flat terrain is faster, steep uphill or downhill terrain is slower.
$$ v_T(\theta)= \frac{6}{3.6} \exp\left( -3.5 \left| \tan\left(\frac{\pi\theta}{180}\right)+0.05 \right| \right) $$The app slider uses your chosen walking speed. Internally this becomes:
$$ k = \frac{v_{user}}{6} $$This is why the code uses walking speed divided by 6: Tobler’s reference walking speed is 6 km/h.
$$ t_{move} = \frac{L}{k \cdot v_T(\theta)} $$For each segment, the model knows the percentage of the segment that is in shadow:
$$ h = \frac{H}{100} $$The route can either prefer shadow or prefer sun. This is represented by:
The undesirable exposure fraction is:
$$ b(s,h)=\frac{1-s(2h-1)}{2} $$This means:
The exposure penalty is calculated as:
$$ t_{shadow}=w \cdot L \cdot b(s,h) $$The parameter \(w\) converts undesirable exposure length into a time-like penalty.
Where:
Shadows were precomputed for 2026 in hourly steps. The result is indicative and depends on the quality and date of the surface model. Trees, temporary construction, parked vehicles, and seasonal leaf changes may differ from reality.