mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-18 03:41:52 +03:00
Cleaning up the map_model transit representation a bit. #372
This commit is contained in:
parent
6e11c386ac
commit
fc674df9ac
@ -202,15 +202,6 @@ fn route_body(ctx: &mut EventCtx, app: &App, details: &mut Details, id: TransitR
|
|||||||
.into_widget(ctx),
|
.into_widget(ctx),
|
||||||
);
|
);
|
||||||
|
|
||||||
if app.opts.dev {
|
|
||||||
rows.push(
|
|
||||||
ctx.style()
|
|
||||||
.btn_outline
|
|
||||||
.text("Open OSM relation")
|
|
||||||
.build_widget(ctx, format!("open {}", route.osm_rel_id)),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let buses = app.primary.sim.status_of_buses(id, map);
|
let buses = app.primary.sim.status_of_buses(id, map);
|
||||||
let mut bus_locations = Vec::new();
|
let mut bus_locations = Vec::new();
|
||||||
if buses.is_empty() {
|
if buses.is_empty() {
|
||||||
@ -330,7 +321,7 @@ fn route_body(ctx: &mut EventCtx, app: &App, details: &mut Details, id: TransitR
|
|||||||
// Draw the route, label stops, and show location of buses
|
// Draw the route, label stops, and show location of buses
|
||||||
{
|
{
|
||||||
let mut colorer = ColorNetwork::new(app);
|
let mut colorer = ColorNetwork::new(app);
|
||||||
for req in route.all_steps(map) {
|
for req in route.all_path_requests(map) {
|
||||||
for step in map.pathfind(req).unwrap().get_steps() {
|
for step in map.pathfind(req).unwrap().get_steps() {
|
||||||
if let PathStep::Lane(l) = step {
|
if let PathStep::Lane(l) = step {
|
||||||
colorer.add_l(*l, app.cs.unzoomed_bus);
|
colorer.add_l(*l, app.cs.unzoomed_bus);
|
||||||
|
@ -87,7 +87,7 @@ impl TransitNetwork {
|
|||||||
if !show_trains && tr.route_type == PathConstraints::Train {
|
if !show_trains && tr.route_type == PathConstraints::Train {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for req in tr.all_steps(map) {
|
for req in tr.all_path_requests(map) {
|
||||||
if let Ok(path) = map.pathfind(req) {
|
if let Ok(path) = map.pathfind(req) {
|
||||||
for step in path.get_steps() {
|
for step in path.get_steps() {
|
||||||
if let PathStep::Lane(l) = step {
|
if let PathStep::Lane(l) = step {
|
||||||
|
@ -58,7 +58,7 @@ pub enum PermanentEditCmd {
|
|||||||
old: PermanentEditIntersection,
|
old: PermanentEditIntersection,
|
||||||
},
|
},
|
||||||
ChangeRouteSchedule {
|
ChangeRouteSchedule {
|
||||||
osm_rel_id: osm::RelationID,
|
gtfs_id: String,
|
||||||
old: Vec<Time>,
|
old: Vec<Time>,
|
||||||
new: Vec<Time>,
|
new: Vec<Time>,
|
||||||
},
|
},
|
||||||
@ -79,7 +79,7 @@ impl EditCmd {
|
|||||||
},
|
},
|
||||||
EditCmd::ChangeRouteSchedule { id, old, new } => {
|
EditCmd::ChangeRouteSchedule { id, old, new } => {
|
||||||
PermanentEditCmd::ChangeRouteSchedule {
|
PermanentEditCmd::ChangeRouteSchedule {
|
||||||
osm_rel_id: map.get_tr(*id).osm_rel_id,
|
gtfs_id: map.get_tr(*id).gtfs_id.clone(),
|
||||||
old: old.clone(),
|
old: old.clone(),
|
||||||
new: new.clone(),
|
new: new.clone(),
|
||||||
}
|
}
|
||||||
@ -118,14 +118,10 @@ impl PermanentEditCmd {
|
|||||||
.with_context(|| format!("old ChangeIntersection of {} invalid", i))?,
|
.with_context(|| format!("old ChangeIntersection of {} invalid", i))?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
PermanentEditCmd::ChangeRouteSchedule {
|
PermanentEditCmd::ChangeRouteSchedule { gtfs_id, old, new } => {
|
||||||
osm_rel_id,
|
|
||||||
old,
|
|
||||||
new,
|
|
||||||
} => {
|
|
||||||
let id = map
|
let id = map
|
||||||
.find_tr(osm_rel_id)
|
.find_tr_by_gtfs(>fs_id)
|
||||||
.ok_or_else(|| anyhow!("can't find {}", osm_rel_id))?;
|
.ok_or_else(|| anyhow!("can't find {}", gtfs_id))?;
|
||||||
Ok(EditCmd::ChangeRouteSchedule { id, old, new })
|
Ok(EditCmd::ChangeRouteSchedule { id, old, new })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -664,9 +664,9 @@ impl Map {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_tr(&self, id: osm::RelationID) -> Option<TransitRouteID> {
|
pub fn find_tr_by_gtfs(&self, gtfs_id: &str) -> Option<TransitRouteID> {
|
||||||
for tr in self.all_transit_routes() {
|
for tr in self.all_transit_routes() {
|
||||||
if tr.osm_rel_id == id {
|
if tr.gtfs_id == gtfs_id {
|
||||||
return Some(tr.id);
|
return Some(tr.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use abstutil::{deserialize_usize, serialize_usize};
|
use abstutil::{deserialize_usize, serialize_usize};
|
||||||
use geom::Time;
|
use geom::Time;
|
||||||
|
|
||||||
use crate::{osm, LaneID, Map, PathConstraints, PathRequest, Position};
|
use crate::{LaneID, Map, PathConstraints, PathRequest, Position};
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
|
||||||
pub struct TransitStopID {
|
pub struct TransitStopID {
|
||||||
@ -54,11 +54,12 @@ pub struct TransitRoute {
|
|||||||
pub id: TransitRouteID,
|
pub id: TransitRouteID,
|
||||||
pub long_name: String,
|
pub long_name: String,
|
||||||
pub short_name: String,
|
pub short_name: String,
|
||||||
pub gtfs_trip_marker: Option<String>,
|
pub gtfs_id: String,
|
||||||
pub osm_rel_id: osm::RelationID,
|
|
||||||
pub stops: Vec<TransitStopID>,
|
pub stops: Vec<TransitStopID>,
|
||||||
/// May be a border or not. If not, is long enough for buses to spawn fully.
|
/// A transit vehicle spawns at the beginning of this lane. This lane may be at a border or the
|
||||||
|
/// first stop. For the non-border case, the lane must be long enough for the vehicle to spawn.
|
||||||
pub start: LaneID,
|
pub start: LaneID,
|
||||||
|
/// A transit vehicle either vanishes at its last stop or exits the map through this border.
|
||||||
pub end_border: Option<LaneID>,
|
pub end_border: Option<LaneID>,
|
||||||
pub route_type: PathConstraints,
|
pub route_type: PathConstraints,
|
||||||
/// Non-empty, times in order for one day when a vehicle should begin at start.
|
/// Non-empty, times in order for one day when a vehicle should begin at start.
|
||||||
@ -69,7 +70,7 @@ pub struct TransitRoute {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl TransitRoute {
|
impl TransitRoute {
|
||||||
pub fn all_steps(&self, map: &Map) -> Vec<PathRequest> {
|
pub fn all_path_requests(&self, map: &Map) -> Vec<PathRequest> {
|
||||||
let mut steps = vec![PathRequest::vehicle(
|
let mut steps = vec![PathRequest::vehicle(
|
||||||
Position::start(self.start),
|
Position::start(self.start),
|
||||||
map.get_ts(self.stops[0]).driving_pos,
|
map.get_ts(self.stops[0]).driving_pos,
|
||||||
|
@ -93,7 +93,9 @@ impl TripPhaseType {
|
|||||||
TripPhaseType::WaitingForBus(r, _) => {
|
TripPhaseType::WaitingForBus(r, _) => {
|
||||||
format!("Waiting for transit route {}", map.get_tr(r).long_name)
|
format!("Waiting for transit route {}", map.get_tr(r).long_name)
|
||||||
}
|
}
|
||||||
TripPhaseType::RidingBus(r, _, _) => format!("Riding route {}", map.get_tr(r).long_name),
|
TripPhaseType::RidingBus(r, _, _) => {
|
||||||
|
format!("Riding route {}", map.get_tr(r).long_name)
|
||||||
|
}
|
||||||
TripPhaseType::Cancelled => "Trip was cancelled due to some bug".to_string(),
|
TripPhaseType::Cancelled => "Trip was cancelled due to some bug".to_string(),
|
||||||
TripPhaseType::Finished => "Trip finished".to_string(),
|
TripPhaseType::Finished => "Trip finished".to_string(),
|
||||||
TripPhaseType::DelayedStart => "Delayed by a previous trip taking too long".to_string(),
|
TripPhaseType::DelayedStart => "Delayed by a previous trip taking too long".to_string(),
|
||||||
|
@ -127,11 +127,7 @@ fn dump_route_goldenfile(map: &map_model::Map) -> Result<()> {
|
|||||||
));
|
));
|
||||||
let mut f = File::create(path)?;
|
let mut f = File::create(path)?;
|
||||||
for tr in map.all_transit_routes() {
|
for tr in map.all_transit_routes() {
|
||||||
writeln!(
|
writeln!(f, "{} from {} to {:?}", tr.gtfs_id, tr.start, tr.end_border)?;
|
||||||
f,
|
|
||||||
"{} from {} to {:?}",
|
|
||||||
tr.osm_rel_id, tr.start, tr.end_border
|
|
||||||
)?;
|
|
||||||
for ts in &tr.stops {
|
for ts in &tr.stops {
|
||||||
let ts = map.get_ts(*ts);
|
let ts = map.get_ts(*ts);
|
||||||
writeln!(
|
writeln!(
|
||||||
|
Loading…
Reference in New Issue
Block a user