/// <summary> /// Generate data info text of MICAPS 11 /// </summary> /// <param name="aDataInfo"></param> /// <returns></returns> public string GenerateInfoText_M11(MICAPS11DataInfo aDataInfo) { string dataInfo; dataInfo = "File Name: " + aDataInfo.FileName; dataInfo += Environment.NewLine + "Description: " + aDataInfo.Description; dataInfo += Environment.NewLine + "Time: " + aDataInfo.DateTime.ToString("yyyy-MM-dd HH:00"); dataInfo += Environment.NewLine + "Forecast Hours = " + aDataInfo.hours.ToString() + " Level = " + aDataInfo.level.ToString(); dataInfo += Environment.NewLine + "Xsize = " + aDataInfo.XNum.ToString() + " Ysize = " + aDataInfo.YNum.ToString(); return(dataInfo); }
/// <summary> /// Read MICAPS 11 data info /// </summary> /// <param name="aFile">file path</param> /// <returns>MICAPS 11 data info</returns> public MICAPS11DataInfo ReadMicaps11(string aFile) { StreamReader sr = new StreamReader(aFile, Encoding.Default); string aLine; string[] dataArray; int i, j, n, LastNonEmpty; List <string> dataList = new List <string>(); MICAPS11DataInfo aM11DataInfo = new MICAPS11DataInfo(); aM11DataInfo.FileName = aFile; aLine = sr.ReadLine(); aM11DataInfo.Description = aLine; aLine = sr.ReadLine(); dataArray = aLine.Split(); LastNonEmpty = -1; dataList.Clear(); for (i = 0; i < dataArray.Length; i++) { if (dataArray[i] != string.Empty) { LastNonEmpty++; dataList.Add(dataArray[i]); } } for (n = 0; n <= 10; n++) { if (dataList.Count < 14) { aLine = sr.ReadLine(); dataArray = aLine.Split(); LastNonEmpty = -1; for (i = 0; i < dataArray.Length; i++) { if (dataArray[i] != string.Empty) { LastNonEmpty++; dataList.Add(dataArray[i]); } } } else { break; } } aM11DataInfo.DateTime = Convert.ToDateTime(dataList[0] + "-" + dataList[1] + "-" + dataList[2] + " " + dataList[3] + ":00"); aM11DataInfo.hours = Convert.ToInt32(dataList[4]); aM11DataInfo.level = Convert.ToInt32(dataList[5]); aM11DataInfo.XDelt = Convert.ToSingle(dataList[6]); aM11DataInfo.YDelt = Convert.ToSingle(dataList[7]); aM11DataInfo.XMin = Convert.ToSingle(dataList[8]); aM11DataInfo.XMax = Convert.ToSingle(dataList[9]); aM11DataInfo.YMin = Convert.ToSingle(dataList[10]); aM11DataInfo.YMax = Convert.ToSingle(dataList[11]); aM11DataInfo.XNum = Convert.ToInt32(dataList[12]); aM11DataInfo.YNum = Convert.ToInt32(dataList[13]); if (aM11DataInfo.XMax > 1000) { aM11DataInfo.isLonLat = false; } else { aM11DataInfo.isLonLat = true; } aM11DataInfo.X = new double[aM11DataInfo.XNum]; for (i = 0; i < aM11DataInfo.XNum; i++) { aM11DataInfo.X[i] = aM11DataInfo.XMin + i * aM11DataInfo.XDelt; } aM11DataInfo.Y = new double[aM11DataInfo.YNum]; for (i = 0; i < aM11DataInfo.YNum; i++) { aM11DataInfo.Y[i] = aM11DataInfo.YMin + i * aM11DataInfo.YDelt; } string dataStr = sr.ReadToEnd(); sr.Close(); dataArray = dataStr.Split(); LastNonEmpty = -1; dataList.Clear(); for (i = 0; i < dataArray.Length; i++) { if (dataArray[i] != string.Empty) { LastNonEmpty++; dataList.Add(dataArray[i]); } } aM11DataInfo.UGridData = new double[aM11DataInfo.YNum, aM11DataInfo.XNum]; aM11DataInfo.VGridData = new double[aM11DataInfo.YNum, aM11DataInfo.XNum]; int dataNum = aM11DataInfo.YNum * aM11DataInfo.XNum; for (i = 0; i < aM11DataInfo.YNum; i++) { for (j = 0; j < aM11DataInfo.XNum; j++) { aM11DataInfo.UGridData[i, j] = double.Parse(dataList[i * aM11DataInfo.XNum + j]); aM11DataInfo.VGridData[i, j] = double.Parse(dataList[dataNum + i * aM11DataInfo.XNum + j]); } } return(aM11DataInfo); }