예제 #1
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }