bool Data_Service::Get_Veh_Type_Data (Veh_Type_File &file, Veh_Type_Data &veh_type_rec) { int type; double dvalue; //---- check the vehicle type ---- type = file.Type (); if (type <= 0) return (false); //---- set the record key ---- veh_type_rec.Type (type); if (file.Version () <= 40) { veh_type_rec.Type (VehType40_Map (type, file.SubType ())); } //---- vehicle length ---- veh_type_rec.Length (file.Length ()); if (veh_type_rec.Length () < Round (4.0)) { dvalue = UnRound (veh_type_rec.Length ()); Warning (String ("Vehicle Type %d Length %.1lf is Out of Range") % type % dvalue); return (false); } //---- maximum speed ---- veh_type_rec.Max_Speed (file.Max_Speed ()); if (veh_type_rec.Max_Speed () < Round (5.0)) { dvalue = UnRound (veh_type_rec.Max_Speed ()); Warning (String ("Vehicle Type %d Maximum Speed %.1lf is Out of Range") % type % dvalue); return (false); } //---- maximum acceleration ---- veh_type_rec.Max_Accel (file.Max_Accel ()); if (veh_type_rec.Max_Accel () < Round (0.5)) { dvalue = UnRound (veh_type_rec.Max_Accel ()); Warning (String ("Vehicle Type %d Maximum Acceleration %.1lf is Out of Range") % type % dvalue); return (false); } //---- maximum deceleration ---- veh_type_rec.Max_Decel (file.Max_Decel ()); if (veh_type_rec.Max_Decel () < Round (0.5)) { veh_type_rec.Max_Decel (veh_type_rec.Max_Accel ()); } //---- operating cost ---- veh_type_rec.Op_Cost (file.Op_Cost ()); //---- vehicle use code ---- if (!file.Use_Flag () && file.Version () <= 40) { veh_type_rec.Use (Veh_Type_Map (type)); } else { veh_type_rec.Use (file.Use ()); } if (veh_type_rec.Use () == CAR) veh_type_rec.Use (SOV); //---- vehicle capacity ---- veh_type_rec.Capacity (file.Capacity ()); if (veh_type_rec.Capacity () < 1) { Warning (String ("Vehicle Type %d Capacity %d is Out of Range") % type % veh_type_rec.Capacity ()); return (false); } veh_type_rec.Max_Load (file.Max_Load ()); if (veh_type_rec.Max_Load () < veh_type_rec.Capacity ()) { veh_type_rec.Max_Load ((int) (veh_type_rec.Capacity () * 1.5)); } veh_type_rec.Occupancy (file.Occupancy ()); //---- loading/unloading rate (seconds per passenger * 100) ---- veh_type_rec.Loading (file.Loading ()); veh_type_rec.Unloading (file.Unloading ()); if (veh_type_rec.Loading () <= 0) { veh_type_rec.Loading (3.0); } if (veh_type_rec.Unloading () <= 0) { veh_type_rec.Unloading (2.0); } //---- loading method ---- veh_type_rec.Method (file.Method ()); //---- dwell time ---- veh_type_rec.Min_Dwell (file.Min_Dwell ()); veh_type_rec.Max_Dwell (file.Max_Dwell ()); //---- grade function ---- veh_type_rec.Grade_Func (file.Grade_Func ()); //---- fuel function ---- veh_type_rec.Fuel_Func (file.Fuel_Func ()); veh_type_rec.Fuel_Cap (file.Fuel_Cap ()); return (true); }
void NewFormat::Read_Routes (void) { String field; int i, node, route, route_fld, mode_fld, ttime_fld, name_fld, note_fld, node_fld, dwell_fld, time_fld, spd_fld; int head_fld [24], offset_fld [24], ttim_fld [24]; Int_Map_Stat map_stat; Int_Map_Itr map_itr; Route_Header route_rec, *route_ptr; //---- process the route header file ---- Show_Message (String ("Reading %s -- Record") % route_header.File_Type ()); Set_Progress (); route_fld = route_header.Required_Field ("ROUTE", "LINE"); mode_fld = route_header.Required_Field ("MODE", "TYPE"); ttime_fld = route_header.Optional_Field ("TTIME", "TIME", "MIN_TIME"); name_fld = route_header.Optional_Field ("NAME", "ROUTE_NAME", "RTNAME", "DESCRIPTION"); note_fld = route_header.Optional_Field (NOTES_FIELD_NAMES); for (i=1; i <= route_periods; i++) { field ("HEADWAY_%d") % i; head_fld [i-1] = route_header.Required_Field (field.c_str ()); field ("OFFSET_%d") % i; offset_fld [i-1] = route_header.Optional_Field (field.c_str ()); field ("TTIME_%d") % i; ttim_fld [i-1] = route_header.Optional_Field (field.c_str ()); if (ttim_fld [i-1] < 0) ttim_fld [i-1] = ttime_fld; } while (route_header.Read ()) { Show_Progress (); route_rec.Clear (); route_rec.Route (route_header.Get_Integer (route_fld)); if (route_rec.Route () == 0) continue; //---- set the parking type ---- route_rec.Mode (Transit_Code (route_header.Get_String (mode_fld))); route_rec.Name (route_header.Get_String (name_fld)); route_rec.Notes (route_header.Get_String (note_fld)); switch (route_rec.Mode ()) { case LOCAL_BUS: route_rec.Veh_Type (4); break; case EXPRESS_BUS: route_rec.Veh_Type (5); break; case BRT: route_rec.Veh_Type (6); break; case STREETCAR: route_rec.Veh_Type (7); break; case LRT: route_rec.Veh_Type (8); break; case RAPIDRAIL: route_rec.Veh_Type (9); break; case REGIONRAIL: route_rec.Veh_Type (10); break; } if (veh_type_array.size () > 0) { route_rec.Veh_Type (VehType40_Map (route_rec.Veh_Type (), 0)); if (route_rec.Veh_Type () > 0) { Int_Map_Itr map_itr = veh_type_map.find (route_rec.Veh_Type ()); if (map_itr == veh_type_map.end ()) { Warning (String ("Transit Vehicle Type %d was Not Found") % route_rec.Veh_Type ()); route_rec.Veh_Type (0); } else { route_rec.Veh_Type (map_itr->second); } } else { route_rec.Veh_Type (0); } } for (i=0; i < route_periods; i++) { Route_Period period_rec; period_rec.Headway (route_header.Get_Time (head_fld [i])); period_rec.Offset (route_header.Get_Time (offset_fld [i])); period_rec.TTime (route_header.Get_Integer (ttim_fld [i])); route_rec.periods.push_back (period_rec); } map_stat = route_map.insert (Int_Map_Data (route_rec.Route (), (int) route_nodes_array.size ())); if (!map_stat.second) { Warning ("Duplicate Route Number = ") << route_rec.Route (); } else { route_nodes_array.push_back (route_rec); } } End_Progress (); Print (2, String ("Number of %s Records = %d") % route_header.File_Type () % Progress_Count ()); //---- process the route nodes file ---- Show_Message (String ("Reading %s -- Record") % route_nodes.File_Type ()); Set_Progress (); route_fld = route_nodes.Required_Field ("ROUTE", "LINE"); node_fld = route_nodes.Required_Field ("NODE", "STOP"); dwell_fld = route_nodes.Optional_Field ("DWELL", "DWELL_TIME", "STOP_TIME", "STOPTIME"); time_fld = route_nodes.Optional_Field ("TIME", "TTIME", "RUNTIME", "RUN_TIME"); spd_fld = route_nodes.Optional_Field ("SPEED", "SPD", "RUNSPD", "RUN_SPD", "RUN_SPEED"); while (route_nodes.Read ()) { Show_Progress (); route = route_nodes.Get_Integer (route_fld); map_itr = route_map.find (route); if (map_itr == route_map.end ()) { Warning (String ("Route Nodes Route %d was Not Found in the Route Header File") % route); continue; } route_ptr = &route_nodes_array [map_itr->second]; Route_Node node_rec; node = route_nodes.Get_Integer (node_fld); if (node < 0) { node_rec.Type (NO_STOP); node = -node; } else { node_rec.Type (STOP); } map_itr = node_map.find (node); if (map_itr == node_map.end ()) { Warning (String ("Route %d Node %d was Not Found") % route % node); continue; } node_rec.Node (map_itr->second); node_rec.Dwell (Dtime (route_nodes.Get_Integer (dwell_fld), SECONDS)); node_rec.Time (Dtime (route_nodes.Get_Integer (time_fld), SECONDS)); node_rec.Speed (Internal_Units (route_nodes.Get_Double (spd_fld), MPS)); route_ptr->nodes.push_back (node_rec); } End_Progress (); Print (2, String ("Number of %s Records = %d") % route_nodes.File_Type () % Progress_Count ()); }
bool Data_Service::Get_Driver_Data (Driver_File &file, Driver_Data &driver_rec) { int route; //---- process a header line ---- if (!file.Nested ()) { int type; Int_Map_Itr map_itr; route = file.Route (); if (route == 0) return (false); if (file.Links () < 1) return (false); map_itr = line_map.find (route); if (map_itr == line_map.end ()) { Warning (String ("Transit Route %d was Not Found") % route); return (false); } driver_rec.Route (map_itr->second); type = file.Type (); driver_rec.Type (type); if (file.SubType_Flag () && file.Version () <= 40) { driver_rec.Type (VehType40_Map (type, file.SubType ())); } if (driver_rec.Type () > 0) { map_itr = veh_type_map.find (driver_rec.Type ()); if (map_itr == veh_type_map.end ()) { Warning (String ("Driver Route %d Vehicle Type %d was Not Found") % route % driver_rec.Type ()); return (false); } driver_rec.Type (map_itr->second); } return (true); } //---- process a link record ---- int link, dir, dir_index; Link_Data *link_ptr; link = file.Link (); dir = file.Dir (); link_ptr = Set_Link_Direction (file, link, dir); if (link_ptr == 0) return (false); if (dir) { dir_index = link_ptr->BA_Dir (); } else { dir_index = link_ptr->AB_Dir (); } if (dir_index < 0) { Line_Data *line_ptr = &line_array [driver_rec.Route ()]; route = line_ptr->Route (); link = file.Link (); Warning (String ("Route %d Link %d Direction %s was Not Found") % route % link % ((dir) ? "BA" : "AB")); return (false); } driver_rec.push_back (dir_index); return (true); }