コード例 #1
0
        /// <summary>
        /// 对每个月文件夹下的日拼接产品数据进行旬的周期合成
        /// </summary>
        /// <param name="tendir"></param>
        /// <param name="regionFiles"></param>
        private void ComputeTenPeriodSyn(string setname, string dirXun, Dictionary <string, List <string> > regionFiles, RasterStatics sta, string resl, Action <int, string> progressCallback, string label = "day")
        {
            DateTime datebegion, dateend;

            foreach (string region in regionFiles.Keys)
            {
                StringBuilder filePrefixXun = new StringBuilder();
                filePrefixXun.AppendFormat("{0}_{1}_{2}_Ten_", setname, _dataOrigin, region);
                string[]          parafiles = regionFiles[region].ToArray();
                DayFileWithDate[] newDays = MarkDate(parafiles, out datebegion, out dateend);
                int year = datebegion.Year, month = datebegion.Month;
                for (int ten = 1; ten <= 3; ++ten)
                {
                    //得到每个xun的起始和终止日期
                    DateTime xunBegin = new DateTime(year, month, (ten - 1) * 10 + 1);
                    DateTime xunEnd   = new DateTime(year, month, (ten == 3) ? DateTime.DaysInMonth(year, month) : (ten * 10));
                    //对于每一个xun,查询其对应的日产品文件
                    IEnumerable <DayFileWithDate> query =
                        from newDay in newDays
                        where newDay.date.CompareTo(xunBegin) >= 0 && newDay.date.CompareTo(xunEnd) <= 0
                        select newDay;
                    if (query.Count <DayFileWithDate>() != 0)
                    {
                        DayFileWithDate[] newDaysSelect = query.ToArray <DayFileWithDate>();
                        string[]          filesSelect   = DayFileWithDate.GetFiles(newDaysSelect);
                        StringBuilder     outnamePrefix = new StringBuilder();
                        outnamePrefix.Append(filePrefixXun.ToString()).Append(year).Append("-").Append(month.ToString("D2")).Append("-").Append(ten);
                        //统计开始
                        StatisticTen(dirXun, outnamePrefix, filesSelect, sta, resl, label);
                    }
                }
            }
        }
コード例 #2
0
ファイル: PeriodicComputeAlg.cs プロジェクト: windygu/hispeed
        /// <summary>
        /// 对每个月文件夹下的日拼接产品数据进行旬的周期合成
        /// </summary>
        /// <param name="tendir"></param>
        /// <param name="regionFiles"></param>
        private void ComputeTenPeriodSyn(string setname, string dirXun, Dictionary <string, List <string> > regionFiles, RasterStatics sta, string resl, Action <int, string> progressCallback, string label = "day")
        {
            DateTime datebegion, dateend;

            foreach (string region in regionFiles.Keys)
            {
                if (!_con.QueryRegionID(region.ToLower(), out _regionID))
                {
                    if (progressCallback != null)
                    {
                        progressCallback(-1, "\t\t查询" + region + "区域的ID失败!");
                    }
                    return;
                }
                if (_regionID == 0)
                {
                    _regionID = 1;
                }
                StringBuilder filePrefixXun = new StringBuilder();
                filePrefixXun.AppendFormat("{0}_{1}_{2}_Ten_", setname, _dataOrigin, region);
                string[]          parafiles = regionFiles[region].ToArray();
                DayFileWithDate[] newDays = MarkDate(parafiles, out datebegion, out dateend, progressCallback);
                int      year = datebegion.Year, month = datebegion.Month;
                string[] tenNO = new string[3] {
                    "上", "中", "下"
                };
                for (int ten = 1; ten <= 3; ++ten)
                {
                    if (progressCallback != null)
                    {
                        progressCallback(-1, "\t\t\t开始合成" + region + "区域的" + tenNO [ten - 1] + "旬产品...");
                    }
                    //得到每个xun的起始和终止日期
                    DateTime xunBegin = new DateTime(year, month, (ten - 1) * 10 + 1);
                    DateTime xunEnd   = new DateTime(year, month, (ten == 3) ? DateTime.DaysInMonth(year, month) : (ten * 10));
                    //对于每一个xun,查询其对应的日产品文件
                    IEnumerable <DayFileWithDate> query =
                        from newDay in newDays
                        where newDay.date.CompareTo(xunBegin) >= 0 && newDay.date.CompareTo(xunEnd) <= 0
                        select newDay;
                    if (query.Count <DayFileWithDate>() != 0)
                    {
                        DayFileWithDate[] newDaysSelect = query.ToArray <DayFileWithDate>();
                        string[]          filesSelect   = DayFileWithDate.GetFiles(newDaysSelect);
                        StringBuilder     outnamePrefix = new StringBuilder();
                        outnamePrefix.Append(filePrefixXun.ToString()).Append(year).Append("-").Append(month.ToString("D2")).Append("-").Append(ten);
                        //统计开始
                        StatisticTen(dirXun, outnamePrefix, filesSelect, sta, resl, label, progressCallback);
                    }
                    else
                    {
                        if (progressCallback != null)
                        {
                            progressCallback(-1, "\t\t\t未找到符合" + region + "区域的" + tenNO[ten - 1] + "旬的数据!");
                        }
                    }
                }
            }
        }
コード例 #3
0
 /// <summary>
 /// 从日产品文件提取日期信息
 /// </summary>
 /// <param name="dayPrds"></param>
 /// <returns></returns>
 private static DayFileWithDate[] MarkDate(string[] dayPrds, out DateTime datebegin, out DateTime dateend)
 {
     datebegin = DateTime.Now;
     dateend   = DateTime.MinValue;
     DayFileWithDate[] newDays = new DayFileWithDate[dayPrds.Length];
     for (int i = 0; i < dayPrds.Length; ++i)
     {
         newDays[i].path = dayPrds[i];
         //CldFrcTot_MOD06_china_日产品_20131204.LDF
         string[] splitsAll = Path.GetFileNameWithoutExtension(dayPrds[i]).Split('_');
         newDays[i].date = DateTime.ParseExact(splitsAll[4], "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
         if (newDays[i].date > dateend)
         {
             dateend = newDays[i].date;
         }
         if (newDays[i].date < datebegin)
         {
             datebegin = newDays[i].date;
         }
     }
     return(newDays);
 }