bool Relocate::Get_Link_Data (Link_File &file, Link_Data &link_rec, Dir_Data &ab_rec, Dir_Data &ba_rec) { if (!Data_Service::Get_Link_Data (file, link_rec, ab_rec, ba_rec)) return (false); if (target_flag) { link_rec.Divided (2); ab_rec.Sign (2); ba_rec.Sign (2); Int_Map_Itr map_itr = link_map.find (link_rec.Link ()); if (map_itr != link_map.end ()) { Dir_Data *dir_ptr; Link_Data *link_ptr = &link_array [map_itr->second]; if (link_ptr->Anode () == link_rec.Anode () && link_ptr->Bnode () == link_rec.Bnode ()) { link_ptr->Divided (1); if (shape_flag) { Int_Map_Itr map_itr = target_shape_map.find (link_rec.Link ()); if (map_itr != target_shape_map.end ()) { link_ptr->Shape (map_itr->second); } } if (link_ptr->AB_Dir () >= 0) { dir_ptr = &dir_array [link_ptr->AB_Dir ()]; dir_ptr->Sign (1); } if (link_ptr->BA_Dir () >= 0) { dir_ptr = &dir_array [link_ptr->BA_Dir ()]; dir_ptr->Sign (1); } return (false); } else if (link_ptr->Anode () == link_rec.Anode () || link_ptr->Bnode () == link_rec.Bnode ()) { link_ptr->Divided (3); if (shape_flag) { Int_Map_Itr map_itr = target_shape_map.find (link_rec.Link ()); if (map_itr != target_shape_map.end ()) { link_ptr->Shape (map_itr->second); } } } if (link_rec.AB_Dir () >= 0) { link_rec.AB_Dir ((int) dir_array.size ()); target_dir_map.insert (Int_Map_Data (ab_rec.Link_Dir (), link_rec.AB_Dir ())); dir_array.push_back (ab_rec); } if (link_rec.BA_Dir () >= 0) { link_rec.BA_Dir ((int) dir_array.size ()); target_dir_map.insert (Int_Map_Data (ba_rec.Link_Dir (), link_rec.BA_Dir ())); dir_array.push_back (ba_rec); } target_link_map.insert (Int_Map_Data (link_rec.Link (), (int) link_array.size ())); link_array.push_back (link_rec); return (false); } } else { link_rec.Divided (0); ab_rec.Sign (0); ba_rec.Sign (0); } return (true); }
int Data_Service::Put_Link_Data (Link_File &file, Link_Data &data) { if (file.Model_Format () == TPPLUS) { int a, b, count; double length; Dir_Data *dir_ptr; if (data.Length () == 0) return (0); count = 0; a = data.Anode (); b = data.Bnode (); length = UnRound (data.Length ()); if (System_Data_Flag (NODE)) { a = node_array [a].Node (); b = node_array [b].Node (); } if (data.AB_Dir () >= 0) { file.Node_A (a); file.Node_B (b); file.Length (length); file.Type (data.Type ()); dir_ptr = &dir_array [data.AB_Dir ()]; file.Lanes_AB (dir_ptr->Lanes ()); file.Speed_AB (UnRound (dir_ptr->Speed ())); file.Cap_AB (dir_ptr->Capacity ()); if (file.Dbase_Format () == ARCVIEW) { Link_Shape (&data, 0, *((Arc_Link_File *) &file)); } if (!file.Write_Record ()) { Error (String ("Writing %s") % file.File_Type ()); } count++; } if (data.BA_Dir () >= 0) { file.Node_A (b); file.Node_B (a); file.Length (length); file.Type (data.Type ()); dir_ptr = &dir_array [data.BA_Dir ()]; file.Lanes_AB (dir_ptr->Lanes ()); file.Speed_AB (UnRound (dir_ptr->Speed ())); file.Cap_AB (dir_ptr->Capacity ()); if (file.Dbase_Format () == ARCVIEW) { Link_Shape (&data, 1, *((Arc_Link_File *) &file)); } if (!file.Write_Record ()) { Error (String ("Writing %s") % file.File_Type ()); } count++; } return (count); } Dir_Data *dir_ptr; if (data.Length () == 0) return (0); file.Link (data.Link ()); file.Name (data.Name ()); file.Node_A (node_array [data.Anode ()].Node ()); file.Node_B (node_array [data.Bnode ()].Node ()); file.Length (UnRound (data.Length ())); file.Setback_A (UnRound (data.Aoffset ())); file.Setback_B (UnRound (data.Boffset ())); file.Type (data.Type ()); file.Divided (data.Divided ()); file.Area_Type (data.Area_Type ()); file.Use (data.Use ()); file.Grade (UnRound (data.Grade ())); file.Notes (data.Notes ()); if (data.AB_Dir () >= 0) { dir_ptr = &dir_array [data.AB_Dir ()]; file.Lanes_AB (dir_ptr->Lanes ()); file.Speed_AB (UnRound (dir_ptr->Speed ())); if (dir_ptr->Time0 () > 0) { file.Fspd_AB ((double) data.Length () / dir_ptr->Time0 ()); } else { file.Fspd_AB (UnRound (dir_ptr->Speed ())); } if (file.Fspd_AB () > file.Speed_AB () && file.Speed_AB () > 0) { if ((file.Fspd_AB () - file.Speed_AB ()) > 0.5) { if (Metric_Flag ()) { Warning (String ("Link %d Free Flow Speed %.1lf > Maximum Speed %.1lf") % data.Link () % External_Units (file.Fspd_AB (), MPH) % External_Units (file.Speed_AB (), MPH)); } else { Warning (String ("Link %d Free Flow Speed %.1lf > Maximum Speed %.1lf") % data.Link () % External_Units (file.Fspd_AB (), MPH) % External_Units (file.Speed_AB (), MPH)); } } file.Fspd_AB (file.Speed_AB ()); } file.Cap_AB (dir_ptr->Capacity ()); file.Bearing_A (dir_ptr->In_Bearing ()); file.Bearing_B (dir_ptr->Out_Bearing ()); } else { file.Lanes_AB (0); file.Speed_AB (0); file.Fspd_AB (0); file.Cap_AB (0); } if (data.BA_Dir () >= 0) { dir_ptr = &dir_array [data.BA_Dir ()]; file.Lanes_BA (dir_ptr->Lanes ()); file.Speed_BA (UnRound (dir_ptr->Speed ())); if (dir_ptr->Time0 () > 0) { file.Fspd_BA ((double) data.Length () / dir_ptr->Time0 ()); } else { file.Fspd_BA (UnRound (dir_ptr->Speed ())); } if (file.Fspd_BA () > file.Speed_BA () && file.Speed_BA () > 0) { if ((file.Fspd_BA () - file.Speed_BA ()) > 0.5) { if (Metric_Flag ()) { Warning (String ("Link %d Free Flow Speed %.1lf > Maximum Speed %.1lf") % data.Link () % External_Units (file.Fspd_BA (), MPH) % External_Units (file.Speed_BA (), MPH)); } else { Warning (String ("Link %d Free Flow Speed %.1lf > Maximum Speed %.1lf") % data.Link () % External_Units (file.Fspd_BA (), MPH) % External_Units (file.Speed_BA (), MPH)); } } file.Fspd_BA (file.Speed_BA ()); } file.Cap_BA (dir_ptr->Capacity ()); if (data.AB_Dir () < 0) { file.Bearing_B (compass.Flip (dir_ptr->In_Bearing ())); file.Bearing_A (compass.Flip (dir_ptr->Out_Bearing ())); } } else { file.Lanes_BA (0); file.Speed_BA (0); file.Fspd_BA (0); file.Cap_BA (0); } if (file.Dbase_Format () == ARCVIEW) { Link_Shape (&data, 0, *((Arc_Link_File *) &file)); } if (!file.Write_Record ()) { Error (String ("Writing %s") % file.File_Type ()); } return (1); }