/// <summary> /// Read station model data /// </summary> /// <param name="timeIdx">Time index</param> /// <param name="levelIdx">Level index</param> /// <returns>Station data</returns> public StationModelData GetStationModelData(int timeIdx, int levelIdx) { StationModelData smData = new StationModelData(); string aStid; int i; Single lon, lat; List <string> dataList = new List <string>(); List <StationModel> smList = new List <StationModel>(); double[,] DiscreteData = new double[10, DataList.Count]; Single minX, maxX, minY, maxY; minX = 0; maxX = 0; minY = 0; maxY = 0; for (i = 0; i < DataList.Count; i++) { dataList = DataList[i]; aStid = (string)dataList[0]; lon = Convert.ToSingle(dataList[1]); lat = Convert.ToSingle(dataList[2]); StationModel sm = new StationModel(); sm.Longitude = lon; sm.Latitude = lat; sm.WindDirection = Convert.ToDouble(dataList[8]); //Wind direction sm.WindSpeed = Convert.ToDouble(dataList[9]); //Wind speed sm.CloudCover = 1; //Cloud cover sm.Temperature = Convert.ToDouble(dataList[6]); //Temperature double ddp = double.Parse(dataList[7]); sm.DewPoint = DiscreteData[7, i] - ddp; //Dew point sm.Pressure = double.Parse(dataList[5]); //Pressure smList.Add(sm); if (i == 0) { minX = lon; maxX = minX; minY = lat; maxY = minY; } else { if (minX > lon) { minX = lon; } else if (maxX < lon) { maxX = lon; } if (minY > lat) { minY = lat; } else if (maxY < lat) { maxY = lat; } } } Extent dataExtent = new Extent(); dataExtent.minX = minX; dataExtent.maxX = maxX; dataExtent.minY = minY; dataExtent.maxY = maxY; smData.Data = smList; smData.DataExtent = dataExtent; smData.MissingValue = this.MissingValue; return(smData); }
/// <summary> /// Read station model data /// </summary> /// <param name="timeIdx">Time index</param> /// <param name="levelIdx">Level index</param> /// <returns>Station data</returns> public StationModelData GetStationModelData(int timeIdx, int levelIdx) { StationModelData smData = new StationModelData(); string aStid; int i; Single lon, lat; List <string> dataList = new List <string>(); List <StationModel> smList = new List <StationModel>(); double[,] DiscreteData = new double[10, DataList.Count]; Single minX, maxX, minY, maxY; minX = 0; maxX = 0; minY = 0; maxY = 0; for (i = 0; i < DataList.Count; i++) { dataList = DataList[i]; aStid = (string)dataList[0]; lon = Convert.ToSingle(dataList[1]); lat = Convert.ToSingle(dataList[2]); //if (lon < 0) //{ // lon += 360; //} StationModel sm = new StationModel(); sm.StationIdentifer = aStid; sm.Longitude = lon; sm.Latitude = lat; sm.WindDirection = Convert.ToDouble(dataList[6]); //Wind direction sm.WindSpeed = Convert.ToDouble(dataList[7]); //Wind speed sm.Visibility = Convert.ToDouble(dataList[17]); //Visibility sm.Weather = Convert.ToDouble(dataList[18]); //Weather sm.CloudCover = Convert.ToDouble(dataList[5]); //Cloud cover sm.Temperature = Convert.ToDouble(dataList[19]); //Temperature sm.DewPoint = Convert.ToDouble(dataList[16]); //Dew point //Pressure double press = Convert.ToDouble(dataList[8]); if (MIMath.DoubleEquals(press, this.MissingValue)) { sm.Pressure = press; } else { if (press > 800) { sm.Pressure = press / 10 + 900; } else { sm.Pressure = press / 10 + 1000; } } smList.Add(sm); if (i == 0) { minX = lon; maxX = minX; minY = lat; maxY = minY; } else { if (minX > lon) { minX = lon; } else if (maxX < lon) { maxX = lon; } if (minY > lat) { minY = lat; } else if (maxY < lat) { maxY = lat; } } } Extent dataExtent = new Extent(); dataExtent.minX = minX; dataExtent.maxX = maxX; dataExtent.minY = minY; dataExtent.maxY = maxY; smData.Data = smList; smData.DataExtent = dataExtent; smData.MissingValue = this.MissingValue; return(smData); }
/// <summary> /// Read station model data /// </summary> /// <param name="timeIdx">Time index</param> /// <param name="levelIdx">Level index</param> /// <returns>Station data</returns> public StationModelData GetStationModelData(int timeIdx, int levelIdx) { StationModelData smData = new StationModelData(); string aStid; int i; float lon, lat; List <string> dataList = new List <string>(); List <StationModel> smList = new List <StationModel>(); double[,] DiscreteData = new double[10, DataList.Count]; float minX, maxX, minY, maxY; minX = 0; maxX = 0; minY = 0; maxY = 0; string windSpeedIndicator = "/"; string reportType = "AAXX"; for (i = 0; i < DataList.Count; i++) { dataList = DataList[i]; reportType = dataList[2]; windSpeedIndicator = dataList[3]; aStid = dataList[4]; lon = float.Parse(dataList[0]); lat = float.Parse(dataList[1]); int sIdx = 5; switch (reportType) { case "BBXX": case "OOXX": sIdx = 8; break; } //Initialize data StationModel sm = new StationModel(); sm.Longitude = lon; sm.Latitude = lat; sm.WindDirection = GetDataValue(dataList, 2, sIdx, windSpeedIndicator); //Wind direction sm.WindSpeed = GetDataValue(dataList, 3, sIdx, windSpeedIndicator); //Wind speed sm.Visibility = GetDataValue(dataList, 0, sIdx, windSpeedIndicator); //Visibility sm.Weather = GetDataValue(dataList, 8, sIdx, windSpeedIndicator); //Weather sm.CloudCover = GetDataValue(dataList, 1, sIdx, windSpeedIndicator); //Cloud cover sm.Temperature = GetDataValue(dataList, 4, sIdx, windSpeedIndicator); //Temperature sm.DewPoint = GetDataValue(dataList, 5, sIdx, windSpeedIndicator); //Dew point smList.Add(sm); //Get extent if (i == 0) { minX = lon; maxX = minX; minY = lat; maxY = minY; } else { if (minX > lon) { minX = lon; } else if (maxX < lon) { maxX = lon; } if (minY > lat) { minY = lat; } else if (maxY < lat) { maxY = lat; } } } Extent dataExtent = new Extent(); dataExtent.minX = minX; dataExtent.maxX = maxX; dataExtent.minY = minY; dataExtent.maxY = maxY; smData.Data = smList; smData.DataExtent = dataExtent; smData.MissingValue = this.MissingValue; return(smData); }
/// <summary> /// Read station model data /// </summary> /// <param name="timeIdx">Time index</param> /// <param name="levelIdx">Level index</param> /// <returns>Station data</returns> public StationModelData GetStationModelData(int timeIdx, int levelIdx) { StationModelData smData = new StationModelData(); string aStid; int i; double lon, lat, var; string aLine; //double[,] DiscreteData = new double[10, dataList.Count]; List <StationModel> smList = new List <StationModel>(); double minX, maxX, minY, maxY; minX = 0; maxX = 0; minY = 0; maxY = 0; string lonStr, latStr, varStr; //Loop for (i = 0; i < dataList.Count; i++) { aLine = dataList[i]; aStid = aLine.Substring(4, 6); latStr = aLine.Substring(28, 6); if (latStr == "+99999") { continue; } lat = double.Parse(latStr) / 1000; lonStr = aLine.Substring(34, 7); if (lonStr == "+999999") { continue; } lon = double.Parse(lonStr) / 1000; StationModel sm = new StationModel(); sm.Longitude = lon; sm.Latitude = lat; for (int j = 0; j < 8; j++) { int startIdx = 0, vLen = 1, scaleFactor = 1; string undefStr = ""; var = MissingValue; bool hasData = true; switch (j) { case 0: //Wind direction startIdx = 60; vLen = 3; undefStr = "999"; break; case 1: //Wind speed startIdx = 65; vLen = 4; undefStr = "9999"; scaleFactor = 10; break; case 2: //visibility startIdx = 78; vLen = 6; undefStr = "999999"; break; case 5: //Temperature startIdx = 87; vLen = 5; undefStr = "+9999"; scaleFactor = 10; break; case 6: //Dew point temperature startIdx = 93; vLen = 5; undefStr = "+9999"; scaleFactor = 10; break; case 7: //Sea level pressure startIdx = 99; vLen = 5; undefStr = "99999"; scaleFactor = 10; break; case 3: //Present weather if (aLine.Contains("MW1")) //Manual report { startIdx = aLine.IndexOf("MW1") + 3; vLen = 2; } else if (aLine.Contains("AW1")) //Automatic report { startIdx = aLine.IndexOf("AW1") + 3; vLen = 2; } else { hasData = false; } break; case 4: //Cloud cover if (aLine.Contains("GF1")) { startIdx = aLine.IndexOf("GF1") + 3; vLen = 2; undefStr = "99"; } else { hasData = false; } break; } if (hasData) { varStr = aLine.Substring(startIdx, vLen); if (varStr != undefStr) { try { var = double.Parse(varStr) / scaleFactor; } catch { } } } switch (j) { case 0: //Wind direction sm.WindDirection = var; break; case 1: //Wind speed sm.WindSpeed = var; break; case 2: //visibility sm.Visibility = var; break; case 5: //Temperature sm.Temperature = var; break; case 6: //Dew point temperature sm.DewPoint = var; break; case 7: //Sea level pressure sm.Pressure = var; break; case 3: //Present weather sm.Weather = var; break; case 4: //Cloud cover sm.CloudCover = var; break; } } if (i == 0) { minX = lon; maxX = minX; minY = lat; maxY = minY; } else { if (minX > lon) { minX = lon; } else if (maxX < lon) { maxX = lon; } if (minY > lat) { minY = lat; } else if (maxY < lat) { maxY = lat; } } } Extent dataExtent = new Extent(); dataExtent.minX = minX; dataExtent.maxX = maxX; dataExtent.minY = minY; dataExtent.maxY = maxY; smData.Data = smList; smData.DataExtent = dataExtent; smData.MissingValue = this.MissingValue; return(smData); }