コード例 #1
0
        private FetchClimateBatchResponce FetchClimateTimeSeries(ClimateParameter p, double latmin, double latmax, double lonmin, double lonmax, int hourmin, int hourmax, int daymin, int daymax, int yearmin, int yearmax, int divider, IntervalToSplit intervalToSplit, FetchingOptions options)
        {
            int n;
            if (hourmax == GlobalConsts.DefaultValue)
                hourmax = 24;
            if (hourmin == GlobalConsts.DefaultValue)
                hourmin = 0;
            bool isReplaceDayMaxWithDefVal = (yearmax!=yearmin && (daymax==GlobalConsts.DefaultValue || daymax==365));            
            if (daymin == GlobalConsts.DefaultValue)
                daymin = 1;
            int effDayMax = daymax;
            if (effDayMax == GlobalConsts.DefaultValue)
                effDayMax = (yearmin == yearmax) ? (DateTime.IsLeapYear(yearmin) ? 366 : 365) : 365;
            ResearchVariationType rvt = ResearchVariationType.Auto;
            switch (intervalToSplit)
            {
                case IntervalToSplit.Years: n = (int)Math.Ceiling((yearmax - yearmin + 1) / (double)divider); rvt = ResearchVariationType.Yearly; break;
                case IntervalToSplit.Days: n = (int)Math.Ceiling((effDayMax - daymin + 1) / (double)divider); rvt = ResearchVariationType.Seasonly; break;
                case IntervalToSplit.Hours: n = (int)Math.Ceiling((hourmax - hourmin + 1) / (double)divider); rvt = ResearchVariationType.Hourly; break;
                default: throw new NotImplementedException();
            }
            double[] latmaxs = new double[n];
            double[] latmins = new double[n];
            double[] lonmaxs = new double[n];
            double[] lonmins = new double[n];
            int[] hourmins = new int[n];
            int[] hourmaxs = new int[n];
            int[] daymins = new int[n];
            int[] daymaxs = new int[n];
            int[] yearmins = new int[n];
            int[] yearmaxs = new int[n];

            int yi = (intervalToSplit == IntervalToSplit.Years) ? 1 : 0;
            int di = (intervalToSplit == IntervalToSplit.Days) ? 1 : 0;
            int hi = (intervalToSplit == IntervalToSplit.Hours) ? 1 : 0;

            for (int i = 0; i < n; i++)
            {
                latmaxs[i] = latmax;
                latmins[i] = latmin;
                lonmaxs[i] = lonmax;
                lonmins[i] = lonmin;
                hourmins[i] = Math.Min((hi==0)?hourmin:(hourmin + hi * i * divider),24);
                hourmaxs[i] = Math.Min((hi == 0) ? hourmax : (hourmin + hi * ((i + 1) * divider-1)), 24);
                yearmins[i] = (yi == 0) ? yearmin : (yearmin + yi * i * divider);
                yearmaxs[i] = (yi == 0) ? yearmax:(yearmin + yi * ((i + 1) * divider-1));
                daymins[i] = Math.Min((di==0)?daymin:(daymin + di *(i * divider)),(yearmins[i]==yearmaxs[i] && DateTime.IsLeapYear(yearmins[i]))?366:365);
                if (isReplaceDayMaxWithDefVal && intervalToSplit!=IntervalToSplit.Days)                                    
                    daymaxs[i] = GlobalConsts.DefaultValue;
                else
                    daymaxs[i] = Math.Min((di == 0) ? daymax : (daymin + di * ((i + 1) * divider - 1)), (yearmins[i] == yearmaxs[i] && DateTime.IsLeapYear(yearmins[i])) ? 366 : 365);
                
            }
            return FetchClimate(p, latmins, latmaxs, lonmins, lonmaxs, hourmins, hourmaxs, daymins, daymaxs, yearmins, yearmaxs, options,rvt);
        }
コード例 #2
0
        private FetchClimateBatchResponce FetchClimateTimeSeries(ClimateParameter p, double latmin, double latmax, double lonmin, double lonmax, int hourmin, int hourmax, int daymin, int daymax, int yearmin, int yearmax, int divider, IntervalToSplit intervalToSplit, FetchingOptions options)
        {
            int n;

            if (hourmax == GlobalConsts.DefaultValue)
            {
                hourmax = 24;
            }
            if (hourmin == GlobalConsts.DefaultValue)
            {
                hourmin = 0;
            }
            bool isReplaceDayMaxWithDefVal = (yearmax != yearmin && (daymax == GlobalConsts.DefaultValue || daymax == 365));

            if (daymin == GlobalConsts.DefaultValue)
            {
                daymin = 1;
            }
            int effDayMax = daymax;

            if (effDayMax == GlobalConsts.DefaultValue)
            {
                effDayMax = (yearmin == yearmax) ? (DateTime.IsLeapYear(yearmin) ? 366 : 365) : 365;
            }
            ResearchVariationType rvt = ResearchVariationType.Auto;

            switch (intervalToSplit)
            {
            case IntervalToSplit.Years: n = (int)Math.Ceiling((yearmax - yearmin + 1) / (double)divider); rvt = ResearchVariationType.Yearly; break;

            case IntervalToSplit.Days: n = (int)Math.Ceiling((effDayMax - daymin + 1) / (double)divider); rvt = ResearchVariationType.Seasonly; break;

            case IntervalToSplit.Hours: n = (int)Math.Ceiling((hourmax - hourmin + 1) / (double)divider); rvt = ResearchVariationType.Hourly; break;

            default: throw new NotImplementedException();
            }
            double[] latmaxs  = new double[n];
            double[] latmins  = new double[n];
            double[] lonmaxs  = new double[n];
            double[] lonmins  = new double[n];
            int[]    hourmins = new int[n];
            int[]    hourmaxs = new int[n];
            int[]    daymins  = new int[n];
            int[]    daymaxs  = new int[n];
            int[]    yearmins = new int[n];
            int[]    yearmaxs = new int[n];

            int yi = (intervalToSplit == IntervalToSplit.Years) ? 1 : 0;
            int di = (intervalToSplit == IntervalToSplit.Days) ? 1 : 0;
            int hi = (intervalToSplit == IntervalToSplit.Hours) ? 1 : 0;

            for (int i = 0; i < n; i++)
            {
                latmaxs[i]  = latmax;
                latmins[i]  = latmin;
                lonmaxs[i]  = lonmax;
                lonmins[i]  = lonmin;
                hourmins[i] = Math.Min((hi == 0)?hourmin:(hourmin + hi * i * divider), 24);
                hourmaxs[i] = Math.Min((hi == 0) ? hourmax : (hourmin + hi * ((i + 1) * divider - 1)), 24);
                yearmins[i] = (yi == 0) ? yearmin : (yearmin + yi * i * divider);
                yearmaxs[i] = (yi == 0) ? yearmax:(yearmin + yi * ((i + 1) * divider - 1));
                daymins[i]  = Math.Min((di == 0)?daymin:(daymin + di * (i * divider)), (yearmins[i] == yearmaxs[i] && DateTime.IsLeapYear(yearmins[i]))?366:365);
                if (isReplaceDayMaxWithDefVal && intervalToSplit != IntervalToSplit.Days)
                {
                    daymaxs[i] = GlobalConsts.DefaultValue;
                }
                else
                {
                    daymaxs[i] = Math.Min((di == 0) ? daymax : (daymin + di * ((i + 1) * divider - 1)), (yearmins[i] == yearmaxs[i] && DateTime.IsLeapYear(yearmins[i])) ? 366 : 365);
                }
            }
            return(FetchClimate(p, latmins, latmaxs, lonmins, lonmaxs, hourmins, hourmaxs, daymins, daymaxs, yearmins, yearmaxs, options, rvt));
        }