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