Case 07 → Da Vinci’s Birds 🛩️

Background: Krypto slipped through the fingers of Digitown’s law enforcement.

Mission: We need your expertise and experience to help us find the final destination of Krypto.

For all the marbles: In which city did the suspect land?


What we know:

  • Krypto was spotted in Doha airport on August 11, 2023, between 03:30 AM and 05:30 AM (UTC).
  • Krypto is up in the skies doing plane hopping in his wingsuit.

We need to find which flights were at the Doha Airport at during time.

let s2_precision = 13; // ~1 km
Airports
| where municipality == 'Doha'
| extend key=geo_point_to_s2cell(lon, lat, s2_precision)
| join kind=inner (
    Flights
    | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
    | where onground // Only consider planes that were on the ground
) on key
| where Timestamp between(datetime(2023-08-11 03:30:00.0000000)..datetime(2023-08-11 05:30:00.000))
| distinct callsign

Which of these flights were on air after 5:30 am.

let s2_precision = 13; 
Flights
| where callsign in ((
    Airports
    | where municipality == 'Doha'
    | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
    | join kind=inner (
        Flights
        | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
        | where onground // Only consider planes that were on the ground
    ) on key
    | where Timestamp between(datetime(2023-08-11 03:30:00.0000000)..datetime(2023-08-11 05:30:00.000))
    | distinct callsign))
| where Timestamp > datetime(2023-08-11 05:30:00.000) and onground == false
| summarize dcount(callsign)

He hoped off of these 5 planes to another at some point. We need to find planes that at the same place at the same time.

He has to jump from a high to a low point at a distance that makes sense for life. So, we filter by altitude difference.

Airports
| where municipality == "Doha"

let s2_precision = 13; 
Flights
| where callsign in ((
    Airports
    | where municipality == 'Doha'
    | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
    | join kind=inner (
        Flights
        | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
        | where onground // Only consider planes that were on the ground
    ) on key
    | where Timestamp between(datetime(2023-08-11 03:30:00.0000000)..datetime(2023-08-11 05:30:00.000))
    | distinct callsign))
| where Timestamp > datetime(2023-08-11 05:30:00.000) and onground == false
| extend key = geo_point_to_s2cell(lon, lat, s2_precision)
| join kind=inner (Flights
    | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
    | where Timestamp > datetime(2023-08-11 05:30:00.000))
    on key, Timestamp
| where callsign != callsign1
| extend altitudeDiff = geoaltitude - geoaltitude1
| where altitudeDiff < 1000 and altitudeDiff > 0

We are down to one plane. Let us go get Krypto! We need to find out where the plane he jumps to will land.

Airports
| where municipality == "Doha"

let s2_precision = 13; 
Flights
| where callsign in ((
    Airports
    | where municipality == 'Doha'
    | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
    | join kind=inner (
        Flights
        | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
        | where onground // Only consider planes that were on the ground
    ) on key
    | where Timestamp between(datetime(2023-08-11 03:30:00.0000000)..datetime(2023-08-11 05:30:00.000))
    | distinct callsign))
| where Timestamp > datetime(2023-08-11 05:30:00.000) and onground == false
| extend key = geo_point_to_s2cell(lon, lat, s2_precision)
| join kind=inner (Flights
    | extend key=geo_point_to_s2cell(lon, lat, s2_precision)
    | where Timestamp > datetime(2023-08-11 05:30:00.000))
    on key, Timestamp
| where callsign != callsign1
| extend altitudeDiff = geoaltitude - geoaltitude1
| where altitudeDiff < 1000 and altitudeDiff > 0
| project Timestamp1, callsign=callsign1, lat1, lon1, key1
| join kind=inner (
    Flights    
    | where onground // Check planes that are only on the ground
    | summarize (LandingTime, LandingLon, LandingLat)=arg_max(Timestamp, lon, lat) by callsign 
)  on callsign
| where LandingTime > Timestamp1 // Make sure we count only flights that fly from London
| extend key=geo_point_to_s2cell(LandingLon, LandingLat, s2_precision)
| lookup (Airports | extend key=geo_point_to_s2cell(lon, lat, s2_precision)) on key
| where geo_distance_2points(lon, lat, LandingLon, LandingLat) < 5000

Case 08 → Caught a Runner’s High 😶‍🌫️

Case 00 → Comme le Chef! 😎

comments powered by Disqus