Calculate flight distances

This commit is contained in:
Edward Betts 2024-04-06 09:25:32 +02:00
parent a7296c943b
commit 87aaba64b2
2 changed files with 29 additions and 4 deletions

View file

@ -14,6 +14,31 @@ Leg = dict[str, str]
TravelList = list[dict[str, typing.Any]] TravelList = list[dict[str, typing.Any]]
RouteDistances = dict[tuple[str, str], float]
def coords(airport: StrDict) -> tuple[float, float]:
"""Longitude / Latitude as coordinate tuples."""
# return (airport["longitude"], airport["latitude"])
return (airport["latitude"], airport["longitude"])
def flight_distance(f: StrDict) -> float:
"""Distance of flight."""
return float(geodesic(coords(f["from_airport"]), coords(f["to_airport"])).km)
def route_distances_as_json(route_distances: RouteDistances) -> str:
"""Format route distances as JSON string."""
return (
"[\n"
+ ",\n".join(
" " + json.dumps([s1, s2, dist])
for (s1, s2), dist in route_distances.items()
)
+ "\n]"
)
def parse_yaml(travel_type: str, data_dir: str) -> TravelList: def parse_yaml(travel_type: str, data_dir: str) -> TravelList:
"""Parse flights YAML and return list of travel.""" """Parse flights YAML and return list of travel."""
@ -67,9 +92,6 @@ def all_events(data_dir: str) -> list[Event]:
return get_trains(data_dir) + get_flights(data_dir) return get_trains(data_dir) + get_flights(data_dir)
RouteDistances = dict[tuple[str, str], float]
def train_leg_distance(geojson_data: StrDict) -> float: def train_leg_distance(geojson_data: StrDict) -> float:
"""Calculate the total length of a LineString in kilometers from GeoJSON data.""" """Calculate the total length of a LineString in kilometers from GeoJSON data."""
# Extract coordinates # Extract coordinates
@ -81,7 +103,6 @@ def train_leg_distance(geojson_data: StrDict) -> float:
else: else:
first_object["type"] == "MultiLineString" first_object["type"] == "MultiLineString"
coord_list = first_object["coordinates"] coord_list = first_object["coordinates"]
# pprint(coordinates)
total_length_km = 0.0 total_length_km = 0.0

View file

@ -1,3 +1,5 @@
"""Trips."""
import os import os
from datetime import date, datetime, time from datetime import date, datetime, time
from zoneinfo import ZoneInfo from zoneinfo import ZoneInfo
@ -73,6 +75,8 @@ def load_flights(data_dir: str) -> list[StrDict]:
flight["to_airport"] = airports[flight["to"]] flight["to_airport"] = airports[flight["to"]]
if "airline" in flight: if "airline" in flight:
flight["airline_name"] = airlines.get(flight["airline"], "[unknown]") flight["airline_name"] = airlines.get(flight["airline"], "[unknown]")
flight["distance"] = travel.flight_distance(flight)
return flights return flights