Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }