Show rail routes using GeoJSON
This commit is contained in:
parent
4e719a07ab
commit
ba60e4b683
|
@ -124,10 +124,20 @@ coordinates.forEach(function(item) {
|
|||
marker.bindPopup(item.name);
|
||||
});
|
||||
|
||||
// Draw lines for routes
|
||||
// Draw routes
|
||||
routes.forEach(function(route) {
|
||||
var color = route[0] === "train" ? "green" : "red"; // Green for trains, red for flights
|
||||
L.polyline([route[1], route[2]], {color: color}).addTo(map);
|
||||
if (route.geojson) {
|
||||
// If route is defined as GeoJSON
|
||||
L.geoJSON(JSON.parse(route.geojson), {
|
||||
style: function(feature) {
|
||||
return {color: route.type === "train" ? "green" : "blue"}; // Green for trains, blue for flights
|
||||
}
|
||||
}).addTo(map);
|
||||
} else {
|
||||
// If route is defined by 'from' and 'to' coordinates
|
||||
var color = route.type === "train" ? "green" : "red"; // Green for trains, red for flights
|
||||
L.polyline([route.from, route.to], {color: color}).addTo(map);
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
39
web_view.py
39
web_view.py
|
@ -301,23 +301,52 @@ def latlon_tuple(stop: StrDict) -> tuple[float, float]:
|
|||
return (stop["latitude"], stop["longitude"])
|
||||
|
||||
|
||||
def get_trip_routes(
|
||||
trip: Trip,
|
||||
) -> list[tuple[str, tuple[float, float], tuple[float, float]]]:
|
||||
def read_geojson(filename: str) -> str:
|
||||
data_dir = app.config["PERSONAL_DATA"]
|
||||
return open(os.path.join(data_dir, "train_routes", filename + ".geojson")).read()
|
||||
|
||||
|
||||
def get_trip_routes(trip: Trip) -> list[StrDict]:
|
||||
routes = []
|
||||
seen_geojson = set()
|
||||
for t in trip.travel:
|
||||
if t["type"] == "flight":
|
||||
if "from_airport" not in t or "to_airport" not in t:
|
||||
continue
|
||||
fly_from, fly_to = t["from_airport"], t["to_airport"]
|
||||
routes.append(("flight", latlon_tuple(fly_from), latlon_tuple(fly_to)))
|
||||
routes.append(
|
||||
{
|
||||
"type": "flight",
|
||||
"from": latlon_tuple(fly_from),
|
||||
"to": latlon_tuple(fly_to),
|
||||
}
|
||||
)
|
||||
|
||||
else:
|
||||
assert t["type"] == "train"
|
||||
for leg in t["legs"]:
|
||||
train_from, train_to = leg["from_station"], leg["to_station"]
|
||||
geojson_filename = train_from.get("routes", {}).get(train_to["uic"])
|
||||
print(train_from["name"], train_to["name"], geojson_filename)
|
||||
if not geojson_filename:
|
||||
routes.append(
|
||||
{
|
||||
"type": "train",
|
||||
"from": latlon_tuple(train_from),
|
||||
"to": latlon_tuple(train_to),
|
||||
}
|
||||
)
|
||||
continue
|
||||
|
||||
if geojson_filename in seen_geojson:
|
||||
continue
|
||||
seen_geojson.add(geojson_filename)
|
||||
|
||||
routes.append(
|
||||
("train", latlon_tuple(train_from), latlon_tuple(train_to))
|
||||
{
|
||||
"type": "train",
|
||||
"geojson": read_geojson(geojson_filename),
|
||||
}
|
||||
)
|
||||
|
||||
return routes
|
||||
|
|
Loading…
Reference in a new issue