Esempio n. 1
0
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);
}
Esempio n. 2
0
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 ());
}
Esempio n. 3
0
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);
}