/// <summary> /// 统计一个时间段内所有的自动站信息 /// </summary> /// <param name="listInput"></param> /// <param name="fix_hour"></param> /// <returns></returns> private static ChartStationInOneSegment chart_station_num_in_list_by_onesegment(List <StationClass> listInput, int fix_hour) { List <StationClass> list = new List <StationClass>(); int back_number = 0; int lenStations = listInput.Count; for (int i = 0; i < lenStations; i++) { StationClass station = listInput[i]; DateTime dt = station.date; int hour = dt.Hour; if (hour == fix_hour) { back_number++; list.Add(station); } } int len_list = list.Count; ChartStationInOneSegment chartStation = new ChartStationInOneSegment(); chartStation.maxStation = list[0]; chartStation.minStation = list[len_list - 1]; chartStation.sumNumStations = back_number; return(chartStation); }
/// <summary> /// 根据算法推到出同名自动站不同时刻降水集合 /// </summary> /// <param name="listInput"></param> /// <returns></returns> /// private static StationClass handle_leijia_station_in_list(List <StationClass> listInput, int hour_segment) { ///要返回的数据 StationClass stationRight = new StationClass(); int lenStations = listInput.Count; List <int> listHour = new List <int>(); for (int i = 0; i < lenStations; i++) { StationClass station = listInput[i]; DateTime dt = station.date; int hour = dt.Hour; if (!listHour.Contains(hour)) { listHour.Add(hour); } } ////之前考虑年月日时的不同,因为DATATABLE返回来的记录规律,只考虑时的不同 if (listHour.Count > 1) /////如果返回来的小时数>1 { ///////////////////根据时间段来进行调整 ///////////////////找到时间段内的最大值和最小值 if (hour_segment == 1) { List <int> list_num_in_every_hour = new List <int>(); Double input_vlaue_sum = 0.0; for (int h = 0; h < listHour.Count; h++) { int fix_hour = listHour[h]; int station_number_in_this_hour = find_right_station_num_in_list_by_onehour(listInput, fix_hour); list_num_in_every_hour.Add(station_number_in_this_hour); } //////先就1一小时来考虑 int num_this_hour = list_num_in_every_hour[0]; if (num_this_hour == 1) { stationRight = listInput[0]; } else if (num_this_hour > 1) ///1小时内跨多个时间段 { ChartStationInOneSegment chartStationInOneSegment_0 = chart_station_num_in_list_by_onesegment(listInput, listHour[0]); StationClass max_Station = chartStationInOneSegment_0.maxStation; StationClass zero_Station = chartStationInOneSegment_0.minStation; ChartStationInOneSegment chartStationInOneSegment_1 = chart_station_num_in_list_by_onesegment(listInput, listHour[1]); StationClass small_max_Station = chartStationInOneSegment_1.minStation; input_vlaue_sum = Convert.ToDouble(zero_Station.value) - Convert.ToDouble(small_max_Station.value); if (input_vlaue_sum < 0) { input_vlaue_sum = 0; } max_Station.value = (Convert.ToDouble(max_Station.value) + input_vlaue_sum).ToString(); stationRight = max_Station; } } else ////时间段为3小时或6小时 { List <int> list_num_in_every_hour = new List <int>(); Double input_vlaue_sum = 0.0; for (int h = 0; h < listHour.Count; h++) { int fix_hour = listHour[h]; int station_number_in_this_hour = find_right_station_num_in_list_by_onehour(listInput, fix_hour); list_num_in_every_hour.Add(station_number_in_this_hour); } for (int i = 0; i < listHour.Count; i++) { //////先就第一小时来考虑 if (i == 0) { int num_this_hour = list_num_in_every_hour[i]; if (num_this_hour == 1) { continue; } else if (num_this_hour > 1) { int thisHour = listHour[i]; StationClass max_Station = find_max_station_num_in_list_by_onehour(listInput, thisHour); double part_input_vlaue = Convert.ToDouble(max_Station.value); if (part_input_vlaue < 0) { part_input_vlaue = 0; } input_vlaue_sum += Convert.ToDouble(part_input_vlaue); } } else if (i < listHour.Count - 1) { int nextHour = listHour[i - 1]; StationClass zero_Station = find_min_station_num_in_list_by_onehour(listInput, nextHour); double part_input_vlaue = Convert.ToDouble(zero_Station.value); if (part_input_vlaue < 0) { part_input_vlaue = 0; } input_vlaue_sum += Convert.ToDouble(part_input_vlaue); } else { int thisHour = listHour[i]; int nextHour = listHour[i - 1]; StationClass zero_Station = find_min_station_num_in_list_by_onehour(listInput, nextHour); StationClass min_Station = find_min_station_num_in_list_by_onehour(listInput, thisHour); double part_input_vlaue = Convert.ToDouble(zero_Station.value) - Convert.ToDouble(min_Station.value); if (part_input_vlaue < 0) { part_input_vlaue = 0; } input_vlaue_sum += Convert.ToDouble(part_input_vlaue); } } stationRight = listInput[0]; stationRight.value = input_vlaue_sum.ToString(); } } else /////如果返回来的小时数=1,那就取最近的那个时段,因为时间段是从1,3,6开始的 { /////////////////找到min最大的,和最小的station, value相减//////////// stationRight = listInput[0]; } return(stationRight); }