예제 #1
0
 /// <summary>Constructor</summary>
 /// <param name="weatherRecord">気象レコード</param>
 public WeatherDataTable(WeatherRecord[] weatherRecord)
 {
     AddWeatherRecord(weatherRecord);
 }
예제 #2
0
        /// <summary>気象レコードを線形補間する</summary>
        /// <param name="wRecord1">気象レコード1</param>
        /// <param name="wRecord2">気象レコード2</param>
        /// <param name="dTime">補間する時刻</param>
        /// <returns>補間した気象レコード</returns>
        private WeatherRecord interpolateWRecord(WeatherRecord wRecord1, WeatherRecord wRecord2, DateTime dTime)
        {
            //両端と一致する場合は複製を返す
            if (wRecord1.DataDTime == dTime) return (WeatherRecord)wRecord1.Clone();
            else if (wRecord2.DataDTime == dTime)return (WeatherRecord)wRecord2.Clone();

            //その他の場合は補間処理
            WeatherRecord wRecord = new WeatherRecord();
            double ts1 = (dTime - wRecord1.DataDTime).TotalHours;
            double ts2 = (wRecord2.DataDTime - dTime).TotalHours;
            ts1 = ts1 / (ts1 + ts2);
            ts2 = 1.0 - ts1;
            foreach (WeatherRecord.RecordType rt in Enum.GetValues(typeof(WeatherRecord.RecordType)))
            {
                WeatherData wd1 = wRecord1.GetData(rt);
                WeatherData wd2 = wRecord2.GetData(rt);
                WeatherData wd = new WeatherData();

                //いずれかが欠測の場合は欠測
                if (wd1.Source == WeatherData.DataSource.MissingValue ||
                    wd2.Source == WeatherData.DataSource.MissingValue) wd.Source = WeatherData.DataSource.MissingValue;
                //その他の場合は推定(補間)値 //単純な線形補間では問題がある要素もある。直せ!
                else wd.Source = WeatherData.DataSource.PredictedValue;
                wd.Value = wd1.Value * ts1 + wd2.Value * ts2;

                wRecord.SetData(rt, wd);
            }

            return wRecord;
        }
예제 #3
0
 /// <summary>気象レコードを追加する</summary>
 /// <param name="weatherRecord">気象レコード</param>
 /// <remarks>
 /// 一旦追加した気象レコードは変更不可
 /// 変更したい場合は削除した後に新規に追加する
 /// </remarks>
 public void AddWeatherRecord(WeatherRecord weatherRecord)
 {
     wdList.Add(weatherRecord);
 }
예제 #4
0
 /// <summary>気象レコードを追加する</summary>
 /// <param name="weatherRecord">気象レコード配列</param>
 public void AddWeatherRecord(WeatherRecord[] weatherRecord)
 {
     wdList.AddRange(weatherRecord);
 }
예제 #5
0
 /// <summary>空のWeatherRecordを返す</summary>
 /// <returns>空のWeatherRecord</returns>
 public static WeatherRecord GetEmptyWeatherRecord()
 {
     WeatherRecord wr = new WeatherRecord();
     wr.FillMissingData();
     return wr;
 }