Tour de France 2020

During the Tour de France, aircraft are contracted to relay TV signals from helicopters filming the riders. See how their trajectories fits the official map at the bottom of the page.

flight_id start stop duration
0 ASR182B_000 2020-08-29 07:27:30+00:00 2020-08-29 10:37:25+00:00 0 days 03:09:55
1 ASR182B_001 2020-08-30 10:27:30+00:00 2020-08-30 16:42:30+00:00 0 days 06:15:00
2 ASR182B_002 2020-08-31 09:37:30+00:00 2020-08-31 15:42:30+00:00 0 days 06:05:00
3 ASR182B_003 2020-09-01 10:52:35+00:00 2020-09-01 15:57:25+00:00 0 days 05:04:50
4 ASR182B_004 2020-09-02 10:27:30+00:00 2020-09-02 15:22:30+00:00 0 days 04:55:00
5 ASR182B_005 2020-09-03 10:07:30+00:00 2020-09-03 15:02:30+00:00 0 days 04:55:00
6 ASR182B_006 2020-09-04 10:52:35+00:00 2020-09-04 15:12:30+00:00 0 days 04:19:55
7 ASR182B_007 2020-09-05 10:47:30+00:00 2020-09-05 15:47:25+00:00 0 days 04:59:55
8 ASR182B_008 2020-09-06 09:37:30+00:00 2020-09-06 14:47:25+00:00 0 days 05:09:55
9 ASR182B_009 2020-09-08 10:52:35+00:00 2020-09-08 15:27:25+00:00 0 days 04:34:50
10 ASR182B_010 2020-09-09 10:47:30+00:00 2020-09-09 15:52:30+00:00 0 days 05:05:00
11 ASR182B_011 2020-09-10 09:42:35+00:00 2020-09-10 15:17:25+00:00 0 days 05:34:50
12 ASR182B_012 2020-09-11 09:27:30+00:00 2020-09-11 15:17:25+00:00 0 days 05:49:55
13 ASR182B_013 2020-09-12 10:27:30+00:00 2020-09-12 15:47:25+00:00 0 days 05:19:55
14 ASR182B_014 2020-09-13 10:02:35+00:00 2020-09-13 15:22:30+00:00 0 days 05:19:55
15 ASR182B_015 2020-09-15 10:32:35+00:00 2020-09-15 15:57:25+00:00 0 days 05:24:50
16 ASR182B_016 2020-09-16 09:47:30+00:00 2020-09-16 15:22:30+00:00 0 days 05:35:00
17 ASR182B_018 2020-09-17 09:47:30+00:00 2020-09-17 15:22:30+00:00 0 days 05:35:00
18 ASR182B_019 2020-09-18 10:52:35+00:00 2020-09-18 15:27:25+00:00 0 days 04:34:50
19 ASR182B_020 2020-09-19 10:47:30+00:00 2020-09-19 16:22:30+00:00 0 days 05:35:00
from traffic.data.samples import tour_de_france
from ipywidgets import Layout

def straight_ratio(flight) -> float:
    return flight.distance() / flight.cumulative_distance(False, False).max("cumdist")

preprocessed = (
    tour_de_france.iterate_lazy(iterate_kw=dict(by="1H"))
    .assign_id()
    .apply_time("5T", straight_ratio=straight_ratio)
    .query("straight_ratio < .5")
    .max_split()
    .longer_than("1H")
    .eval()
)

stats = preprocessed.summary(["flight_id", "start", "stop", "duration"]).eval()

m = preprocessed.map_leaflet(
    zoom=6, layout=Layout(max_width="600px", height="600px"),
)

display(m)
display(stats)
Tour de France 2020