bool TripData::Get_Zone_Data (Zone_File &file, Zone_Data &data) { if (Data_Service::Get_Zone_Data (file, data)) { int zone = data.Zone (); //---- count the records for the data file ----- for (Data_Itr data_itr = data_group.begin (); data_itr != data_group.end (); data_itr++) { Db_Sort_Array *data = data_itr->data_db; int field = data_itr->zone_field; if (field >= 0) { zone = file.Get_Integer (field); } if (zone < 0) continue; if (data->Read_Record (zone)) { int count = data->Get_Integer (1); data->Put_Field (1, ++count); data->Write_Record (zone); } } return (true); } return (false); }
void ZoneData::Read_Data (void) { int id, field, count; Db_Sort_Array *data; Db_Header *file; Data_Itr data_itr; for (data_itr = data_group.begin (); data_itr != data_group.end (); data_itr++) { file = data_itr->file; data = data_itr->data_db; field = data_itr->join_field; //---- read the data file ---- Show_Message (String ("Reading %s -- Record") % file->File_Type ()); Set_Progress (); count = 0; while (file->Read ()) { Show_Progress (); //---- get the join field id ---- id = file->Get_Integer (field); if (id == 0) continue; //---- copy the data fields ---- data->Copy_Fields (*file); //---- set the record index and zone count ---- data->Put_Field (0, id); data->Put_Field (1, 0); //---- save the database record ---- if (!data->Write_Record (id)) { Error ("Writing Data File Database"); } count++; } End_Progress (); Print (2, String ("Number of Data #%d Records = %d") % data_itr->group % count); file->Close (); } }
void ZoneData::Sum_Zone () { int i, num, field, zone, z; double x0, y0, dx, dy, distance; Db_Sort_Array *data; Sum_Itr sum_itr; Zone_Itr zone_itr; //---- initialize the database ----- for (sum_itr = sum_group.begin (); sum_itr != sum_group.end (); sum_itr++) { data = sum_itr->data_db; for (zone_itr = zone_array.begin (); zone_itr != zone_array.end (); zone_itr++) { zone = zone_itr->Zone (); data->Reset_Record (); data->Put_Field (0, zone); if (!data->Write_Record (zone)) { Error ("Writing Sum Distance Database"); } } } //---- reopen the activity location file ---- input_file->Open (0); Show_Message (String ("Summing %s -- Record") % input_file->File_Type ()); Set_Progress (); while (input_file->Read ()) { Show_Progress (); zone = input_file->Zone (); if (zone == 0) continue; x0 = Scale (input_file->X ()); y0 = Scale (input_file->Y ()); for (zone_itr = zone_array.begin (); zone_itr != zone_array.end (); zone_itr++) { z = zone_itr->Zone (); if (z == zone) continue; dx = zone_itr->X () - x0; dy = zone_itr->Y () - y0; distance = sqrt (dx * dx + dy * dy); for (sum_itr = sum_group.begin (); sum_itr != sum_group.end (); sum_itr++) { if (distance <= sum_itr->distance) { data = sum_itr->data_db; if (!data->Read_Record (z)) continue; num = data->Num_Fields (); data->Put_Field (1, data->Get_Integer (1) + 1); for (i=2; i < num; i++) { field = sum_itr->field_map [i]; data->Put_Field (i, data->Get_Double (i) + input_file->Get_Double (field)); } data->Write_Record (z); } } } } End_Progress (); }