Esempio n. 1
0
        /// <summary>
        /// Read GeoTiff data info
        /// </summary>
        /// <param name="aFile">file path</param>
        public override void ReadDataInfo(string aFile)
        {
            this.FileName = aFile;
            FileStream   sr = new FileStream(aFile, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(sr);

            //Image file header (IFH)
            _byteOrder = ASCIIEncoding.ASCII.GetString(br.ReadBytes(2));
            int  version = BitConverter.ToUInt16(br.ReadBytes(2), 0);
            long offset  = BitConverter.ToUInt32(br.ReadBytes(4), 0);

            //Read IFDs
            ReadIFD(br, offset);


            br.Close();
            sr.Close();

            IFDEntry widthIFD  = this.FindTag(Tag.ImageWidth);
            IFDEntry heightIFD = this.FindTag(Tag.ImageLength);
            int      width     = (int)widthIFD.ValueOffset;
            int      height    = (int)heightIFD.ValueOffset;

            double[] X = new double[width];
            double[] Y = new double[height];
            IFDEntry modelTiePointTag   = FindTag(Tag.ModelTiepointTag);
            IFDEntry modelPixelScaleTag = FindTag(Tag.ModelPixelScaleTag);
            double   minLon             = modelTiePointTag.ValueD[3];
            double   maxLat             = modelTiePointTag.ValueD[4];
            double   xdelt = modelPixelScaleTag.ValueD[0];
            double   ydelt = modelPixelScaleTag.ValueD[1];

            for (int i = 0; i < width; i++)
            {
                X[i] = minLon + xdelt * i;
            }
            for (int i = 0; i < height; i++)
            {
                Y[height - i - 1] = maxLat - ydelt * i;
            }
            Dimension xdim = new Dimension(DimensionType.X);

            xdim.SetValues(X);
            Dimension ydim = new Dimension(DimensionType.Y);

            ydim.SetValues(Y);
            Variable var = new Variable();

            var.Name = "var";
            var.SetDimension(ydim);
            var.SetDimension(xdim);
            List <Variable> vars = new List <Variable>();

            vars.Add(var);
            this.Variables = vars;
        }
        /// <summary>
        /// Read HYSPLIT particle dump data info
        /// </summary>
        /// <param name="aFile">Particle dump file name path</param>
        /// <returns>HYSPLIT particle data info</returns>
        public override void ReadDataInfo(string aFile)
        {
            FileStream   fs = new FileStream(aFile, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            int          year, month, day, hour;

            Times      = new List <DateTime>();
            Parameters = new List <List <int> >();

            this.FileName = aFile;
            List <DateTime> times  = new List <DateTime>();
            List <double>   values = new List <double>();

            while (br.BaseStream.Position < br.BaseStream.Length - 28)
            {
                //Read head
                int pos = (int)br.BaseStream.Position;
                br.ReadBytes(4);
                int particleNum  = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                int pollutantNum = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                year  = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                month = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                day   = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                hour  = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                string dStr = year.ToString("00") + "-" + month.ToString("00") +
                              "-" + day.ToString("00") + " " + hour.ToString("00");
                DateTime time = DateTime.ParseExact(dStr, "yy-MM-dd HH", System.Globalization.CultureInfo.InvariantCulture);
                times.Add(time);
                values.Add(DataConvert.ToDouble(time));
                Parameters.Add(new List <int>(new int[] { particleNum, pollutantNum, pos }));

                //Skip data
                int len = (8 + pollutantNum * 4 + 60) * particleNum + 4;
                br.ReadBytes(len);
            }
            Dimension tdim = new Dimension(DimensionType.T);

            tdim.SetValues(values);
            Variable var = new Variable();

            var.Name      = "Particle";
            var.IsStation = true;
            var.SetDimension(tdim);
            List <Variable> variables = new List <Variable>();

            variables.Add(var);
            this.Variables = variables;

            br.Close();
            fs.Close();
        }
Esempio n. 3
0
        /// <summary>
        /// Read ISH data info
        /// </summary>
        /// <param name="dataFN">ISH data file name</param>
        /// <returns>void</returns>
        public override void ReadDataInfo(string dataFN)
        {
            FileName = dataFN;

            //Read ISH data
            StreamReader sr    = new StreamReader(dataFN);
            string       aLine = sr.ReadLine();
            string       tStr  = aLine.Substring(15, 10);

            dateTime = DateTime.ParseExact(aLine.Substring(15, 10), "yyyyMMddHH",
                                           System.Globalization.CultureInfo.InvariantCulture);
            List <double> tvalues = new List <double>();

            tvalues.Add(DataConvert.ToDouble(dateTime));
            Dimension tDim = new Dimension(DimensionType.T);

            tDim.SetValues(tvalues);

            dataList = new List <string>();
            stNum    = 0;
            while (aLine != null)
            {
                if (aLine == "")
                {
                    aLine = sr.ReadLine();
                    continue;
                }
                string ctStr = aLine.Substring(15, 10);
                if (ctStr != tStr)
                {
                    break;
                }

                dataList.Add(aLine);
                stNum += 1;
                aLine  = sr.ReadLine();
            }
            sr.Close();

            List <Variable> variables = new List <Variable>();

            foreach (string vName in varList)
            {
                Variable var = new Variable();
                var.Name      = vName;
                var.IsStation = true;
                var.SetDimension(tDim);
                variables.Add(var);
            }
            this.Variables = variables;
        }
Esempio n. 4
0
        /// <summary>
        /// Read data info
        /// </summary>
        /// <param name="aFile">file path</param>
        public override void ReadDataInfo(string aFile)
        {
            FileName = aFile;

            int          i;
            StreamReader sr = new StreamReader(aFile, System.Text.Encoding.Default);

            string[]      dataArray;
            List <string> dataList = new List <string>();

            //Read file head
            string aLine = sr.ReadLine();

            Description = aLine;
            //Read all lines
            aLine = sr.ReadLine();
            string bLine;

            while ((bLine = sr.ReadLine()) != null)
            {
                aLine = aLine + " " + bLine;
            }
            sr.Close();

            dataArray = aLine.Split();
            dataList.Clear();
            for (i = 0; i < dataArray.Length; i++)
            {
                if (dataArray[i] != string.Empty)
                {
                    dataList.Add(dataArray[i]);
                }
            }

            //DateTime = Convert.ToDateTime(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
            //        " " + dataList[3] + ":00");
            //DateTime = DateTime.ParseExact(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
            //    " " + dataList[3] + ":00", "yy-MM-dd HH:mm", null);
            int year = int.Parse(dataList[0]);

            if (year < 100)
            {
                if (year < 50)
                {
                    year = 2000 + year;
                }
                else
                {
                    year = 1900 + year;
                }
            }
            DateTime = new DateTime(year, int.Parse(dataList[1]), int.Parse(dataList[2]), int.Parse(dataList[3]), 0, 0);

            Level      = int.Parse(dataList[4]);
            ContourNum = int.Parse(dataList[5]);
            for (i = 0; i < ContourNum; i++)
            {
                Contours.Add(float.Parse(dataList[6 + i]));
            }

            int idx  = 6 + ContourNum + 2;
            int pNum = int.Parse(dataList[idx]);

            idx += pNum * 2 + 1;

            varNum     = int.Parse(dataList[idx]);
            idx       += 1;
            StationNum = int.Parse(dataList[idx]);
            idx       += 1;
            for (i = 0; i < varNum; i++)
            {
                VarList.Add("Var" + (i + 1).ToString());
            }
            FieldList.Add("Stid");
            FieldList.Add("Longitude");
            FieldList.Add("Latitude");
            FieldList.Add("Altitude");
            FieldList.AddRange(VarList);

            while (idx + 3 + varNum < dataList.Count)
            {
                List <string> aData = new List <string>();
                for (int j = 0; j < 4 + varNum; j++)
                {
                    aData.Add(dataList[idx]);
                    idx += 1;
                }
                DataList.Add(aData);
            }

            StationNum = DataList.Count;

            Dimension tdim = new Dimension(DimensionType.T);

            tdim.DimValue.Add(DataConvert.ToDouble(DateTime));
            tdim.DimLength     = 1;
            this.TimeDimension = tdim;
            Dimension zdim = new Dimension(DimensionType.Z);

            zdim.DimValue.Add(Level);
            zdim.DimLength = 1;
            List <Variable> variables = new List <Variable>();

            foreach (string vName in VarList)
            {
                Variable var = new Variable();
                var.Name      = vName;
                var.IsStation = true;
                var.SetDimension(tdim);
                var.SetDimension(zdim);
                variables.Add(var);
            }
            this.Variables = variables;
        }
Esempio n. 5
0
        /// <summary>
        /// Read SYNOP data info
        /// </summary>
        /// <param name="dataFN">METAR data file name</param>
        public override void ReadDataInfo(string dataFN)
        {
            FileName = dataFN;

            //Read stations
            StreamReader sr = new StreamReader(StFileName);
            string       aLine;

            string[]        dataArray;
            List <string>   dataList = new List <string>();
            List <string>   stIDList = new List <string>();
            List <string[]> stPosList = new List <string[]>();
            int             i, LastNonEmpty, dataNum;

            sr.ReadLine();
            dataNum = 0;
            while (true)
            {
                aLine = sr.ReadLine();
                if (aLine == null)
                {
                    break;
                }
                if (aLine == "")
                {
                    continue;
                }
                dataArray = aLine.Split(',');
                stIDList.Add(dataArray[1]);
                stPosList.Add(new string[2] {
                    dataArray[5], dataArray[4]
                });
                dataNum += 1;
            }
            sr.Close();

            //Read data
            sr = new StreamReader(dataFN);
            List <List <string> > disDataList = new List <List <string> >();
            List <string>         stList = new List <string>();
            string   reportType = "AAXX", str, stID;
            DateTime toDay = DateTime.Now;
            DateTime aTime;
            string   windSpeedIndicator = "/";
            int      stIdx;
            bool     isSetTime = true;

            while (true)
            {
                aLine = sr.ReadLine();
                if (aLine == null)
                {
                    break;
                }

                aLine = aLine.Trim();
                if (aLine == string.Empty)
                {
                    continue;
                }

                if (aLine.Length == 3 && MIMath.IsNumeric(aLine)) //Skip group number
                {
                    sr.ReadLine();                                //Skip 090000 line
                    continue;
                }

                //if (aLine.Substring(0, 2) == "SI" || aLine.Substring(0,2) == "SN")    //Skip "SI????" line
                //    continue;

                if (aLine.Length < 4)
                {
                    continue;
                }

                switch (aLine.Substring(0, 4))
                {
                case "AAXX":        //A SYNOP report from a fixed land station is identified by the symbolic letters MiMiMjMj = AAXX
                    reportType = "AAXX";
                    str        = aLine.Substring(aLine.Length - 5, 5);
                    if (isSetTime)
                    {
                        aTime     = new DateTime(toDay.Year, toDay.Month, int.Parse(str.Substring(0, 2)), int.Parse(str.Substring(2, 2)), 0, 0);
                        DateTime  = aTime;
                        isSetTime = false;
                    }
                    windSpeedIndicator = str.Substring(str.Length - 1, 1);
                    break;

                case "BBXX":        //A SHIP report from a sea station is identified by the symbolic letters MiMiMjMj = BBXX
                    reportType = "BBXX";
                    break;

                case "OOXX":        //A SYNOP MOBIL report from a mobile land station is identified by the symbolic letters MiMiMjMj = OOXX
                    reportType = "OOXX";
                    break;

                default:        //Data line
                    while (aLine.Substring(aLine.Length - 1, 1) != "=")
                    {
                        str = sr.ReadLine();
                        if (str == null)
                        {
                            break;
                        }
                        aLine = aLine + " " + sr.ReadLine();
                    }

                    dataArray    = aLine.Split();
                    LastNonEmpty = -1;
                    dataList     = new List <string>();
                    for (i = 0; i < dataArray.Length; i++)
                    {
                        if (dataArray[i] != string.Empty)
                        {
                            LastNonEmpty++;
                            dataList.Add(dataArray[i]);
                        }
                    }

                    stID = dataList[0];
                    switch (reportType)
                    {
                    case "AAXX":
                        if (dataList.Count > 2)
                        {
                            stIdx = stIDList.IndexOf(stID);
                            if (stIdx >= 0)
                            {
                                dataList.Insert(0, windSpeedIndicator);
                                dataList.Insert(0, reportType);
                                dataList.Insert(0, stPosList[stIdx][1]);
                                dataList.Insert(0, stPosList[stIdx][0]);
                                disDataList.Add(dataList);
                            }
                        }
                        break;

                    case "BBXX":
                    case "OOXX":
                        if (dataList.Count > 5)
                        {
                            if (dataList[2].Contains("/") || dataList[3].Contains("/"))
                            {
                                continue;
                            }

                            if (dataList[2].Substring(0, 2) != "99")
                            {
                                continue;
                            }

                            str = dataList[1];
                            windSpeedIndicator = str.Substring(str.Length - 1, 1);

                            float lat = float.Parse(dataList[2].Substring(2)) / 10;
                            float lon = float.Parse(dataList[3].Substring(1)) / 10;
                            if (lat > 90 || lon > 180)
                            {
                                continue;
                            }

                            switch (dataList[3].Substring(0, 1))
                            {
                            case "1":                //North east

                                break;

                            case "3":                //South east
                                lat = -lat;
                                break;

                            case "5":                //South west
                                lat = -lat;
                                lon = -lon;
                                break;

                            case "7":                //North west
                                lon = -lon;
                                break;
                            }

                            dataList.Insert(0, windSpeedIndicator);
                            dataList.Insert(0, reportType);
                            dataList.Insert(0, lat.ToString());
                            dataList.Insert(0, lon.ToString());
                            disDataList.Add(dataList);
                        }
                        break;
                    }
                    break;
                }
            }
            sr.Close();

            StationNum = disDataList.Count;
            DataList   = disDataList;

            Dimension tdim = new Dimension(DimensionType.T);

            tdim.DimValue.Add(DataConvert.ToDouble(DateTime));
            tdim.DimLength = 1;
            List <Variable> vars = new List <Variable>();

            foreach (string vName in VarList)
            {
                Variable var = new Variable();
                var.Name = vName;
                var.SetDimension(tdim);
                var.IsStation = true;
                vars.Add(var);
            }
            this.Variables = vars;
        }
Esempio n. 6
0
        /// <summary>
        /// Read MICAPS 11 data info
        /// </summary>
        /// <param name="aFile">file path</param>
        public override void ReadDataInfo(string aFile)
        {
            StreamReader sr = new StreamReader(aFile, Encoding.Default);
            string       aLine;

            string[]      dataArray;
            int           i, j, n, LastNonEmpty;
            List <string> dataList = new List <string>();

            FileName     = aFile;
            aLine        = sr.ReadLine();
            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;
                }
            }
            //DateTime = Convert.ToDateTime(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
            //    " " + dataList[3] + ":00");
            //DateTime = DateTime.ParseExact(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
            //    " " + dataList[3] + ":00", "yy-MM-dd HH:mm", null);
            int year = int.Parse(dataList[0]);

            if (year < 100)
            {
                if (year < 50)
                {
                    year = 2000 + year;
                }
                else
                {
                    year = 1900 + year;
                }
            }
            DateTime = new DateTime(year, int.Parse(dataList[1]), int.Parse(dataList[2]), int.Parse(dataList[3]), 0, 0);

            hours = Convert.ToInt32(dataList[4]);
            level = Convert.ToInt32(dataList[5]);
            XDelt = Convert.ToSingle(dataList[6]);
            YDelt = Convert.ToSingle(dataList[7]);
            bool isYReverse = false;

            if (YDelt < 0)
            {
                YDelt      = -YDelt;
                isYReverse = true;
            }
            XMin = Convert.ToSingle(dataList[8]);
            XMax = Convert.ToSingle(dataList[9]);
            YMax = Convert.ToSingle(dataList[10]);
            YMin = Convert.ToSingle(dataList[11]);
            XNum = Convert.ToInt32(dataList[12]);
            YNum = Convert.ToInt32(dataList[13]);

            if (YMin > YMax)
            {
                float aY = YMin;
                YMin = YMax;
                YMax = aY;
            }

            if (XMax > 1000)
            {
                isLonLat = false;
            }
            else
            {
                isLonLat = true;
            }
            X = new double[XNum];
            for (i = 0; i < XNum; i++)
            {
                X[i] = XMin + i * XDelt;
            }
            Y = new double[YNum];
            for (i = 0; i < YNum; i++)
            {
                Y[i] = YMin + i * 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]);
                }
            }

            UGridData = new double[YNum, XNum];
            VGridData = new double[YNum, XNum];
            int dataNum = YNum * XNum;

            for (i = 0; i < YNum; i++)
            {
                for (j = 0; j < XNum; j++)
                {
                    if (!isYReverse)
                    {
                        UGridData[i, j] = double.Parse(dataList[i * XNum + j]);
                        VGridData[i, j] = double.Parse(dataList[dataNum + i * XNum + j]);
                    }
                    else
                    {
                        UGridData[i, j] = double.Parse(dataList[(YNum - i - 1) * XNum + j]);
                        VGridData[i, j] = double.Parse(dataList[dataNum + (YNum - i - 1) * XNum + j]);
                    }
                }
            }

            Dimension tdim = new Dimension(DimensionType.T);

            tdim.DimValue.Add(DataConvert.ToDouble(DateTime));
            tdim.DimLength     = 1;
            this.TimeDimension = tdim;
            Dimension zdim = new Dimension(DimensionType.Z);

            zdim.DimValue.Add(level);
            zdim.DimLength = 1;
            Dimension xdim = new Dimension(DimensionType.X);

            xdim.SetValues(X);
            Dimension ydim = new Dimension(DimensionType.Y);

            ydim.SetValues(Y);

            List <Variable> variables = new List <Variable>();

            foreach (string vName in variableNames)
            {
                Variable var = new Variable();
                var.Name      = vName;
                var.IsStation = true;
                var.SetDimension(tdim);
                var.SetDimension(zdim);
                var.SetDimension(ydim);
                var.SetDimension(xdim);
                variables.Add(var);
            }
            this.Variables = variables;
        }
        /// <summary>
        /// Read MICAPS 1 data info
        /// </summary>
        /// <param name="aFile">file path</param>
        public override void ReadDataInfo(string aFile)
        {
            StreamReader sr = new StreamReader(aFile, Encoding.Default);
            string       aLine;

            string[]              dataArray;
            int                   i, n, LastNonEmpty, dataNum;
            List <string>         dataList    = new List <string>();
            List <List <string> > disDataList = new List <List <string> >();

            //Read file head
            FileName    = aFile;
            aLine       = sr.ReadLine();
            Description = aLine;
            if (aLine.Contains("自动"))
            {
                isAutoStation = true;
            }
            aLine = sr.ReadLine();
            if (String.IsNullOrEmpty(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]);
                }
            }
            //DateTime = DateTime.ParseExact(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
            //    " " + dataList[3] + ":00", "yy-MM-dd HH:mm", null);
            int year = int.Parse(dataList[0]);

            if (year < 100)
            {
                if (year < 50)
                {
                    year = 2000 + year;
                }
                else
                {
                    year = 1900 + year;
                }
            }
            DateTime = new DateTime(year, int.Parse(dataList[1]), int.Parse(dataList[2]), int.Parse(dataList[3]), 0, 0);

            Dimension tdim = new Dimension(DimensionType.T);

            tdim.DimValue.Add(DataConvert.ToDouble(DateTime));
            tdim.DimLength     = 1;
            this.TimeDimension = tdim;
            List <Variable> variables = new List <Variable>();

            foreach (string vName in VarList)
            {
                Variable var = new Variable();
                var.Name      = vName;
                var.IsStation = true;
                var.SetDimension(tdim);
                variables.Add(var);
            }
            this.Variables = variables;

            stNum = Convert.ToInt32(dataList[4]);

            //Read data
            dataNum = 0;
            do
            {
                aLine = sr.ReadLine();
                if (aLine == null)
                {
                    break;
                }
                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 < 24)
                    {
                        aLine = sr.ReadLine();
                        if (aLine == null)
                        {
                            break;
                        }
                        dataArray    = aLine.Split();
                        LastNonEmpty = -1;
                        for (i = 0; i < dataArray.Length; i++)
                        {
                            if (dataArray[i] != string.Empty)
                            {
                                LastNonEmpty++;
                                dataList.Add(dataArray[i]);
                            }
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                if (dataList.Count < 24)
                {
                    break;
                }
                else
                {
                    for (n = 0; n < 10; n++)
                    {
                        dataList.RemoveAt(dataList.Count - 1);
                        if (dataList.Count == 22)
                        {
                            break;
                        }
                    }
                }

                //if (dataList.Count < 26 && (string)dataList[22] == "1" && (string)dataList[23] == "2")
                //{
                //    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]);
                //        }
                //    }
                //}

                if (dataNum == 0)
                {
                    if (dataList.Count == 26)
                    {
                        hasAllCols = true;
                    }
                    else
                    {
                        hasAllCols = false;
                    }
                }

                dataNum++;
                if (dataNum == 1)
                {
                    varNum = dataList.Count;
                }
                disDataList.Add(dataList);
                dataList = new List <string>();
            }while (aLine != null);

            sr.Close();

            DataList = disDataList;
        }
        /// <summary>
        /// Read data info
        /// </summary>
        /// <param name="aFile">file path</param>
        public override void ReadDataInfo(string aFile)
        {
            FileName = aFile;

            //Read file
            StreamReader sr = new StreamReader(aFile);
            int          LastNonEmpty, i;
            string       aLine;

            string[]      dataArray;
            List <string> dataList = new List <string>();

            aLine = sr.ReadLine();
            for (i = 1; i <= 4; i++)
            {
                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]);
                }
            }

            XNum = int.Parse(dataList[1]);
            YNum = int.Parse(dataList[2]);
            XMin = double.Parse(dataList[3]);
            XMax = double.Parse(dataList[4]);
            YMin = double.Parse(dataList[5]);
            YMax = double.Parse(dataList[6]);
            ZMin = double.Parse(dataList[7]);
            ZMax = double.Parse(dataList[8]);

            XDelt = (XMax - XMin) / (XNum - 1);
            YDelt = (YMax - YMin) / (YNum - 1);
            X     = new double[XNum];
            for (i = 0; i < XNum; i++)
            {
                X[i] = XMin + i * XDelt;
            }
            Y = new double[YNum];
            for (i = 0; i < YNum; i++)
            {
                Y[i] = YMin + i * YDelt;
            }

            sr.Close();

            Dimension xDim = new Dimension(DimensionType.X);

            xDim.SetValues(X);
            Dimension yDim = new Dimension(DimensionType.Y);

            yDim.SetValues(Y);
            List <Variable> variables = new List <Variable>();
            Variable        var       = new Variable();

            var.Name = "var";
            var.SetDimension(xDim);
            var.SetDimension(yDim);
            variables.Add(var);
            this.Variables = variables;
        }
        /// <summary>
        /// Read data info
        /// </summary>
        /// <param name="aFile">file path</param>
        public override void ReadDataInfo(string aFile)
        {
            FileStream   fs = new FileStream(aFile, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs, Encoding.Default);

            //Read file head
            //string header = System.Text.ASCIIEncoding.ASCII.GetString(br.ReadBytes(128));
            string header = System.Text.Encoding.Default.GetString(br.ReadBytes(128));

            string[]      dataArray    = header.Split();
            int           LastNonEmpty = -1;
            List <string> dataList     = new List <string>();

            for (int i = 0; i < dataArray.Length; i++)
            {
                if (dataArray[i] != string.Empty)
                {
                    LastNonEmpty++;
                    dataList.Add(dataArray[i]);
                }
            }
            FileName    = aFile;
            Description = dataList[2];
            //Time = DateTime.Parse(dataList[3] + "-" + dataList[4] + "-" + dataList[5] + " " +
            //    dataList[6] + ":00");
            int aYear = int.Parse(dataList[3]);

            if (aYear < 100)
            {
                if (aYear > 50)
                {
                    aYear = 1900 + aYear;
                }
                else
                {
                    aYear = 2000 + aYear;
                }
            }
            Time = new DateTime(aYear, int.Parse(dataList[4]),
                                int.Parse(dataList[5]), int.Parse(dataList[6]), 0, 0);

            XNum       = int.Parse(dataList[7]);
            YNum       = int.Parse(dataList[8]);
            Lon_LB     = double.Parse(dataList[9]);
            Lat_LB     = double.Parse(dataList[10]);
            ProjOption = int.Parse(dataList[11]);
            ZoomFactor = double.Parse(dataList[12]);
            ImageType  = int.Parse(dataList[13]);
            TableName  = dataList[14];
            if (MIMath.IsNumeric(dataList[15]) && MIMath.IsNumeric(dataList[16]))
            {
                Lon_Center = double.Parse(dataList[15]);
                Lat_Center = double.Parse(dataList[16]);
                if (Lon_Center > 180)
                {
                    Lon_Center = Lon_Center / 100;
                }
                if (Lat_Center > 90)
                {
                    Lat_Center = Lat_Center / 100;
                }
            }
            else
            {
                Lon_Center = 110.0;
                Lat_Center = 30.0;
            }

            //Read image data
            int length = (int)fs.Length - 128;

            ImageBytes = br.ReadBytes(length);

            //Set projection parameters
            GetProjectionInfo();
            CalCoordinate();

            br.Close();
            fs.Close();

            Dimension tdim = new Dimension(DimensionType.T);

            tdim.DimValue.Add(DataConvert.ToDouble(Time));
            tdim.DimLength     = 1;
            this.TimeDimension = tdim;
            Dimension xdim = new Dimension(DimensionType.X);

            xdim.SetValues(X);
            Dimension ydim = new Dimension(DimensionType.Y);

            ydim.SetValues(Y);
            Variable var = new Variable();

            var.Name = "var";
            var.SetDimension(tdim);
            var.SetDimension(ydim);
            var.SetDimension(xdim);
            List <Variable> vars = new List <Variable>();

            vars.Add(var);
            this.Variables = vars;
        }
        /// <summary>
        /// Read MICAPS 4 data info
        /// </summary>
        /// <param name="aFile"></param>
        public override void ReadDataInfo(string aFile)
        {
            StreamReader sr = new StreamReader(aFile, Encoding.Default);
            string       aLine;

            string[]      dataArray;
            int           i, j, n, LastNonEmpty;
            List <string> dataList    = new List <string>();
            List <string> disDataList = new List <string>();

            FileName     = aFile;
            aLine        = sr.ReadLine();
            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 < 19)
                {
                    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;
                }
            }
            //DateTime = Convert.ToDateTime(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
            //    " " + dataList[3] + ":00");
            //DateTime = DateTime.ParseExact(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
            //    " " + dataList[3] + ":00", "yy-MM-dd HH:mm", null);
            int year = int.Parse(dataList[0]);

            if (year < 100)
            {
                if (year < 50)
                {
                    year = 2000 + year;
                }
                else
                {
                    year = 1900 + year;
                }
            }
            DateTime = new DateTime(year, int.Parse(dataList[1]), int.Parse(dataList[2]), int.Parse(dataList[3]), 0, 0);

            hours         = Convert.ToInt32(dataList[4]);
            level         = Convert.ToInt32(dataList[5]);
            XDelt         = Convert.ToSingle(dataList[6]);
            YDelt         = Convert.ToSingle(dataList[7]);
            XMin          = Convert.ToSingle(dataList[8]);
            XMax          = Convert.ToSingle(dataList[9]);
            YMin          = Convert.ToSingle(dataList[10]);
            YMax          = Convert.ToSingle(dataList[11]);
            XNum          = Convert.ToInt32(dataList[12]);
            YNum          = Convert.ToInt32(dataList[13]);
            contourDelt   = Convert.ToSingle(dataList[14]);
            contourSValue = Convert.ToSingle(dataList[15]);
            contourEValue = Convert.ToSingle(dataList[16]);
            smoothCo      = Convert.ToSingle(dataList[17]);
            boldValue     = Convert.ToSingle(dataList[18]);
            if ((string)dataList[16] == "-1" || (string)dataList[16] == "-2" || (string)dataList[16] == "-3")
            {
                isLonLat = false;
                if ((string)dataList[16] == "-1")  // 兰勃托投影
                {
                    ProjectionInfo = KnownCoordinateSystems.Projected.Asia.AsiaLambertConformalConic;
                    double[][] points = new double[3][];
                    points[0] = new double[] { XDelt, YDelt };  //第一行最后一个点
                    points[1] = new double[] { XMin, YMin };    //第一行第一个点
                    points[2] = new double[] { XMax, YMax };    //最后一行最后一个点
                    Reproject.ReprojectPoints(points, KnownCoordinateSystems.Geographic.World.WGS1984, ProjectionInfo, 0, 3);
                    XMin  = (float)points[1][0];
                    XMax  = (float)points[0][0];
                    YMin  = (float)points[0][1];
                    YMax  = (float)points[2][1];
                    XDelt = (XMax - XMin) / (XNum - 1);
                    YDelt = (YMax - YMin) / (YNum - 1);
                }
            }
            else
            {
                isLonLat = true;
            }
            X = new double[XNum];
            for (i = 0; i < XNum; i++)
            {
                X[i] = XMin + i * XDelt;
            }
            Y = new double[YNum];

            bool yReversed = false;

            if (YDelt < 0)
            {
                yReversed = true;
                YDelt     = -YDelt;
            }
            if (YMin > YMax)
            {
                float temp = YMin;
                YMin = YMax;
                YMax = temp;
            }
            for (i = 0; i < YNum; i++)
            {
                Y[i] = YMin + i * 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]);
                }
            }

            double[,] gridData = new double[YNum, XNum];
            for (i = 0; i < YNum; i++)
            {
                for (j = 0; j < XNum; j++)
                {
                    gridData[i, j] = Convert.ToDouble(dataList[i * XNum + j]);
                }
            }

            if (!yReversed)
            {
                GridData = gridData;
            }
            else
            {
                GridData = new double[YNum, XNum];
                for (i = 0; i < YNum; i++)
                {
                    for (j = 0; j < XNum; j++)
                    {
                        GridData[i, j] = gridData[YNum - i - 1, j];
                    }
                }
            }

            Dimension tdim = new Dimension(DimensionType.T);

            tdim.DimValue.Add(DataConvert.ToDouble(DateTime));
            tdim.DimLength     = 1;
            this.TimeDimension = tdim;
            Dimension zdim = new Dimension(DimensionType.Z);

            zdim.DimValue.Add(level);
            zdim.DimLength = 1;
            Dimension xdim = new Dimension(DimensionType.X);

            xdim.SetValues(X);
            Dimension ydim = new Dimension(DimensionType.Y);

            ydim.SetValues(Y);

            List <Variable> variables = new List <Variable>();
            Variable        var       = new Variable();

            var.Name      = "var";
            var.IsStation = true;
            var.SetDimension(tdim);
            var.SetDimension(zdim);
            var.SetDimension(ydim);
            var.SetDimension(xdim);
            variables.Add(var);
            this.Variables = variables;
        }
Esempio n. 11
0
        /// <summary>
        /// Read HYSPLIT concentration data info
        /// </summary>
        /// <param name="aFile">File path</param>
        public override void ReadDataInfo(string aFile)
        {
            FileStream   fs = new FileStream(aFile, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            int          i, j, hBytes;

            byte[] aBytes;

            this.FileName = aFile;

            //Record #1
            br.ReadBytes(4);
            aBytes        = br.ReadBytes(4);
            Ident         = System.Text.ASCIIEncoding.ASCII.GetString(aBytes);
            year          = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            month         = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            day           = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            hour          = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            forecast_hour = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            loc_num       = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            pack_flag     = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());

            //Record #2
            locArray = new object[8, loc_num];
            for (i = 0; i < loc_num; i++)
            {
                br.ReadBytes(8);
                for (j = 0; j < 4; j++)
                {
                    locArray[j, i] = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                }
                for (j = 4; j < 7; j++)
                {
                    aBytes = br.ReadBytes(4);
                    Array.Reverse(aBytes);
                    locArray[j, i] = BitConverter.ToSingle(aBytes, 0);
                }
                locArray[7, i] = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            }

            //Record #3
            string fName = Path.GetFileName(aFile).ToLower();

            if (fName.Contains("gemzint"))
            {
                br.ReadBytes(4);   //For vertical concentration file gemzint
            }
            else
            {
                br.ReadBytes(8);
            }
            lat_point_num = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            lon_point_num = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            aBytes        = br.ReadBytes(4);
            Array.Reverse(aBytes);
            lat_delta = BitConverter.ToSingle(aBytes, 0);
            aBytes    = br.ReadBytes(4);
            Array.Reverse(aBytes);
            lon_delta = BitConverter.ToSingle(aBytes, 0);
            aBytes    = br.ReadBytes(4);
            Array.Reverse(aBytes);
            lat_LF = BitConverter.ToSingle(aBytes, 0);
            aBytes = br.ReadBytes(4);
            Array.Reverse(aBytes);
            lon_LF = BitConverter.ToSingle(aBytes, 0);

            X = new double[lon_point_num];
            Y = new double[lat_point_num];
            for (i = 0; i < lon_point_num; i++)
            {
                X[i] = lon_LF + i * lon_delta;
            }
            if (X[0] == 0 && X[X.Length - 1] +
                lon_delta == 360)
            {
                this.IsGlobal = true;
            }
            for (i = 0; i < lat_point_num; i++)
            {
                Y[i] = lat_LF + i * lat_delta;
            }

            Dimension xdim = new Dimension(DimensionType.X);

            xdim.SetValues(X);
            Dimension ydim = new Dimension(DimensionType.Y);

            ydim.SetValues(Y);

            //Record #4
            br.ReadBytes(8);
            level_num = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            heights   = new int[level_num];
            double[] values = new double[level_num];
            for (i = 0; i < level_num; i++)
            {
                heights[i] = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                values[i]  = heights[i];
            }
            Dimension zdim = new Dimension(DimensionType.Z);

            zdim.SetValues(values);

            //Record #5
            br.ReadBytes(8);
            pollutant_num = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
            pollutants    = new string[pollutant_num];
            for (i = 0; i < pollutant_num; i++)
            {
                aBytes        = br.ReadBytes(4);
                pollutants[i] = System.Text.ASCIIEncoding.ASCII.GetString(aBytes);
            }

            hBytes = 36 + lon_point_num * 40 + 32 + 12 + level_num * 4 + 12 +
                     pollutant_num * 4;
            hByte_num = hBytes;

            //Record Data
            int k, tNum;

            tNum = 0;
            int[]    sampleTimes = new int[6];
            string   dStr;
            DateTime aDateTime;

            sample_start = new List <DateTime>();
            sample_stop  = new List <DateTime>();
            do
            {
                //Record #6
                br.ReadBytes(8);
                for (i = 0; i < 6; i++)
                {
                    sampleTimes[i] = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                }
                dStr = sampleTimes[0].ToString("00") + "-" + sampleTimes[1].ToString("00") +
                       "-" + sampleTimes[2].ToString("00") + " " + sampleTimes[3].ToString("00");
                aDateTime = DateTime.ParseExact(dStr, "yy-MM-dd HH", System.Globalization.CultureInfo.InvariantCulture);
                sample_start.Add(aDateTime);

                //Record #7
                br.ReadBytes(8);
                for (i = 0; i < 6; i++)
                {
                    sampleTimes[i] = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                }
                dStr = sampleTimes[0].ToString("00") + "-" + sampleTimes[1].ToString("00") +
                       "-" + sampleTimes[2].ToString("00") + " " + sampleTimes[3].ToString("00");
                aDateTime = DateTime.ParseExact(dStr, "yy-MM-dd HH", System.Globalization.CultureInfo.InvariantCulture);
                sample_stop.Add(aDateTime);

                //Record 8;
                int    aLevel, aN, IP, JP;
                string aType;
                for (i = 0; i < pollutant_num; i++)
                {
                    for (j = 0; j < level_num; j++)
                    {
                        if (pack_flag == 1)
                        {
                            br.ReadBytes(8);
                            aBytes = br.ReadBytes(4);
                            aType  = System.Text.ASCIIEncoding.ASCII.GetString(aBytes);
                            aLevel = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                            aN     = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                            for (k = 0; k < aN; k++)
                            {
                                if (br.BaseStream.Position + 8 > br.BaseStream.Length)
                                {
                                    break;
                                }
                                IP     = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt16());
                                JP     = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt16());
                                aBytes = br.ReadBytes(4);
                            }
                        }
                        else
                        {
                            br.ReadBytes(8);
                            aBytes = br.ReadBytes(4);
                            aType  = System.Text.ASCIIEncoding.ASCII.GetString(aBytes);
                            aLevel = System.Net.IPAddress.NetworkToHostOrder(br.ReadInt32());
                            for (JP = 0; JP < lat_point_num; JP++)
                            {
                                for (IP = 0; IP < lon_point_num; IP++)
                                {
                                    aBytes = br.ReadBytes(4);
                                }
                            }
                        }
                    }
                }

                tNum += 1;

                if (br.BaseStream.Position + 10 > br.BaseStream.Length)
                {
                    break;
                }
            } while (true);
            time_num = tNum;
            double[] tvalues = new double[time_num];
            for (i = 0; i < time_num; i++)
            {
                tvalues[i] = DataConvert.ToDouble(sample_start[i]);
            }
            Dimension tdim = new Dimension(DimensionType.T);

            tdim.SetValues(tvalues);

            List <Variable> variables = new List <Variable>();

            for (i = 0; i < pollutant_num; i++)
            {
                Variable var = new Variable();
                var.Name = pollutants[i];
                var.SetDimension(tdim);
                var.SetDimension(zdim);
                var.SetDimension(ydim);
                var.SetDimension(xdim);
                variables.Add(var);
            }
            this.Variables = variables;

            br.Close();
            fs.Close();
        }
Esempio n. 12
0
        /// <summary>
        /// Read HYSPLIT trajectory data info
        /// </summary>
        /// <param name="TrajFiles">File paths</param>
        public void ReadDataInfo(string[] TrajFiles)
        {
            this.FileName = TrajFiles[0];
            string aLine;

            string[]      dataArray;
            List <string> dataList = new List <string>();
            int           i, j, t, LastNonEmpty;
            DateTime      aDateTime = new DateTime();

            InitVariables();
            List <double> times = new List <double>();

            for (t = 0; t < TrajFiles.Length; t++)
            {
                string aFile = TrajFiles[t];
                FileNames.Add(aFile);

                FileStream   fs = new FileStream(aFile, FileMode.Open, FileAccess.Read);
                StreamReader sr = new StreamReader(fs);

                //Record #1
                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]);
                    }
                }
                MeteoFileNums.Add(int.Parse(dataList[0]));

                //Record #2
                for (i = 0; i < MeteoFileNums[t]; i++)
                {
                    aLine = sr.ReadLine();
                }

                //Record #3
                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]);
                    }
                }
                TrajeoryNums.Add(int.Parse(dataList[0]));
                TrajeoryNumber += TrajeoryNums[t];
                TrajDirections.Add(dataList[1]);
                VerticalMotions.Add(dataList[2]);

                //Record #4
                TrajectoryInfo        aTrajInfo    = new TrajectoryInfo();
                List <TrajectoryInfo> trajInfoList = new List <TrajectoryInfo>();
                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    aLine        = sr.ReadLine();
                    dataArray    = aLine.Split();
                    LastNonEmpty = -1;
                    dataList.Clear();
                    for (j = 0; j < dataArray.Length; j++)
                    {
                        if (dataArray[j] != string.Empty)
                        {
                            LastNonEmpty++;
                            dataList.Add(dataArray[j]);
                        }
                    }
                    int y = int.Parse(dataList[0]);
                    if (y < 100)
                    {
                        if (y > 50)
                        {
                            y = 1900 + y;
                        }
                        else
                        {
                            y = 2000 + y;
                        }
                    }
                    aDateTime = new DateTime(y, int.Parse(dataList[1]),
                                             int.Parse(dataList[2]), int.Parse(dataList[3]), 0, 0);
                    //aDateTime = DateTime.Parse(dataList[0] + "-" + dataList[1] + "-" +
                    //    dataList[2] + " " + dataList[3] + ":00");
                    if (times.Count == 0)
                    {
                        times.Add(DataConvert.ToDouble(aDateTime));
                    }

                    aTrajInfo             = new TrajectoryInfo();
                    aTrajInfo.StartTime   = aDateTime;
                    aTrajInfo.StartLat    = Single.Parse(dataList[4]);
                    aTrajInfo.StartLon    = Single.Parse(dataList[5]);
                    aTrajInfo.StartHeight = Single.Parse(dataList[6]);
                    trajInfoList.Add(aTrajInfo);
                }
                TrajInfos.Add(trajInfoList);
                Dimension tdim = new Dimension(DimensionType.T);
                tdim.SetValues(times);

                //Record #5
                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]);
                    }
                }
                VarNums.Add(int.Parse(dataList[0]));
                List <string> varNameList = new List <string>();
                for (i = 0; i < VarNums[t]; i++)
                {
                    varNameList.Add(dataList[i + 1]);
                }
                VarNames.Add(varNameList);

                Variable var = new Variable();
                var.Name      = "Traj";
                var.IsStation = true;
                var.SetDimension(tdim);
                List <Variable> variables = new List <Variable>();
                variables.Add(var);
                this.Variables = variables;

                sr.Close();
                fs.Close();
            }
        }
        /// <summary>
        /// Read MICAPS 7 data info
        /// </summary>
        /// <param name="TrajFiles">File paths</param>
        public void ReadDataInfo(string[] TrajFiles)
        {
            this.FileName = TrajFiles[0];
            string aLine;

            string[]      dataArray;
            List <string> dataList = new List <string>();
            int           j, t, LastNonEmpty;
            DateTime      aDateTime = new DateTime();

            InitVariables();
            List <double> times = new List <double>();

            for (t = 0; t < TrajFiles.Length; t++)
            {
                string aFile = TrajFiles[t];
                FileNames.Add(aFile);

                FileStream   fs = new FileStream(aFile, FileMode.Open, FileAccess.Read);
                StreamReader sr = new StreamReader(fs);

                //
                TrajectoryInfo        aTrajInfo    = new TrajectoryInfo();
                List <TrajectoryInfo> trajInfoList = new List <TrajectoryInfo>();
                aLine = sr.ReadLine();
                aLine = sr.ReadLine();
                int trajIdx = -1;
                int trajNum = 0;
                while (aLine != null)
                {
                    if (aLine.Trim() == String.Empty)
                    {
                        aLine = sr.ReadLine();
                        continue;
                    }

                    dataArray    = aLine.Split();
                    LastNonEmpty = -1;
                    dataList.Clear();
                    for (j = 0; j < dataArray.Length; j++)
                    {
                        if (dataArray[j] != string.Empty)
                        {
                            LastNonEmpty++;
                            dataList.Add(dataArray[j]);
                        }
                    }
                    switch (dataList.Count)
                    {
                    case 4:
                        aTrajInfo            = new TrajectoryInfo();
                        aTrajInfo.TrajName   = dataList[0];
                        aTrajInfo.TrajID     = dataList[1];
                        aTrajInfo.TrajCenter = dataList[2];
                        trajIdx  = -1;
                        trajNum += 1;
                        break;

                    case 13:
                        trajIdx += 1;
                        if (trajIdx == 0)
                        {
                            //aDateTime = DateTime.Parse(dataList[0] + "-" + dataList[1] + "-" +
                            //    dataList[2] + " " + dataList[3] + ":00");
                            //aDateTime = DateTime.ParseExact(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
                            //    " " + dataList[3] + ":00", "yy-MM-dd HH:mm", null);
                            int year = int.Parse(dataList[0]);
                            if (year < 100)
                            {
                                if (year < 50)
                                {
                                    year = 2000 + year;
                                }
                                else
                                {
                                    year = 1900 + year;
                                }
                            }
                            aDateTime = new DateTime(year, int.Parse(dataList[1]), int.Parse(dataList[2]), int.Parse(dataList[3]), 0, 0);
                            if (times.Count == 0)
                            {
                                times.Add(DataConvert.ToDouble(aDateTime));
                            }

                            aTrajInfo.StartTime = aDateTime;
                            aTrajInfo.StartLat  = Single.Parse(dataList[6]);
                            aTrajInfo.StartLon  = Single.Parse(dataList[5]);
                            //aTrajInfo.StartHeight = Single.Parse(dataList[6]);
                            trajInfoList.Add(aTrajInfo);
                        }
                        break;
                    }

                    aLine = sr.ReadLine();
                }
                TrajeoryNums.Add(trajNum);
                TrajeoryNumber += TrajeoryNums[t];
                TrajInfos.Add(trajInfoList);

                Dimension tdim = new Dimension(DimensionType.T);
                tdim.SetValues(times);
                this.TimeDimension = tdim;

                sr.Close();
                fs.Close();

                Variable var = new Variable();
                var.Name      = "Traj";
                var.IsStation = true;
                var.SetDimension(tdim);
                List <Variable> variables = new List <Variable>();
                variables.Add(var);
                this.Variables = variables;
            }
        }
Esempio n. 14
0
        /// <summary>
        /// Read ASCII GRID data info
        /// </summary>
        /// <param name="aFile">file path</param>
        /// <returns>ASCII GRID data info</returns>
        public override void ReadDataInfo(string aFile)
        {
            FileName = aFile;

            //double[,] dataArray,newDataArray;
            StreamReader sr = new StreamReader(aFile);
            double       xllCorner, yllCorner, cellSize, nodata_value;
            int          ncols, nrows, LastNonEmpty, i;
            string       aLine;

            string[]      dataArray;
            List <string> dataList = new List <string>();

            aLine = sr.ReadLine();
            for (i = 1; i <= 5; i++)
            {
                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]);
                }
            }

            ncols        = int.Parse(dataList[1]);
            nrows        = int.Parse(dataList[3]);
            xllCorner    = double.Parse(dataList[5]);
            yllCorner    = double.Parse(dataList[7]);
            cellSize     = double.Parse(dataList[9]);
            nodata_value = double.Parse(dataList[11]);

            XNum         = ncols;
            YNum         = nrows;
            XMin         = xllCorner;
            YMin         = yllCorner;
            XDelt        = cellSize;
            YDelt        = cellSize;
            MissingValue = nodata_value;
            X            = new double[XNum];
            for (i = 0; i < XNum; i++)
            {
                X[i] = XMin + i * XDelt;
            }
            if (X[XNum - 1] + XDelt - X[0] == 360)
            {
                this.IsGlobal = true;
            }

            Y = new double[YNum];
            for (i = 0; i < YNum; i++)
            {
                Y[i] = YMin + i * YDelt;
            }

            Dimension xDim = new Dimension(DimensionType.X);

            xDim.SetValues(X);
            this.XDimension = xDim;
            Dimension yDim = new Dimension(DimensionType.Y);

            yDim.SetValues(Y);
            this.YDimension = yDim;

            List <Variable> variables = new List <Variable>();
            Variable        aVar      = new Variable();

            aVar.Name = "var";
            aVar.SetDimension(xDim);
            aVar.SetDimension(yDim);
            variables.Add(aVar);
            this.Variables = variables;

            sr.Close();
        }
Esempio n. 15
0
        /// <summary>
        /// Read data info
        /// </summary>
        /// <param name="aFile">file path</param>
        /// <returns>if ok</returns>
        public override void ReadDataInfo(string aFile)
        {
            this.FileName = aFile;
            //_fileName = aFile;

            FileStream   fs = new FileStream(aFile, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);

            //Read first level head record
            //Part 1
            _dataFileName   = ASCIIEncoding.ASCII.GetString(br.ReadBytes(12));
            _orderOfInt     = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _lenHeadP1      = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _lenHeadP2      = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _lenFillingData = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _lenRecord      = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _numHeadRecord  = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _numDataRecord  = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _productType    = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _zipModel       = BitConverter.ToInt16(br.ReadBytes(2), 0);
            _illumination   = ASCIIEncoding.ASCII.GetString(br.ReadBytes(8));
            _qualityMark    = BitConverter.ToInt16(br.ReadBytes(2), 0);

            //Part 2
            br.BaseStream.Seek(0, SeekOrigin.Begin);
            byte[] bytes  = br.ReadBytes(_lenHeadP1 + _lenHeadP2);
            byte[] tbytes = new byte[2];

            if (_productType == 3)
            {
                Array.Copy(bytes, 50, tbytes, 0, 2);
                _byteGridData = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, 52, tbytes, 0, 2);
                _baseData = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, 54, tbytes, 0, 2);
                _scaleFactor = BitConverter.ToInt16(tbytes, 0);
            }

            int yearIdx = 58;

            switch (_productType)
            {
            case 1:
                yearIdx = 48;
                break;

            case 2:

                break;

            case 3:
                yearIdx = 58;
                break;

            case 4:
                yearIdx = 54;
                break;
            }

            //Get start time
            Array.Copy(bytes, yearIdx, tbytes, 0, 2);
            _startYear = BitConverter.ToInt16(tbytes, 0);
            Array.Copy(bytes, yearIdx + 2, tbytes, 0, 2);
            _startMonth = BitConverter.ToInt16(tbytes, 0);
            Array.Copy(bytes, yearIdx + 4, tbytes, 0, 2);
            _startDay = BitConverter.ToInt16(tbytes, 0);
            Array.Copy(bytes, yearIdx + 6, tbytes, 0, 2);
            _startHour = BitConverter.ToInt16(tbytes, 0);
            Array.Copy(bytes, yearIdx + 8, tbytes, 0, 2);
            _startMinute = BitConverter.ToInt16(tbytes, 0);
            STime        = new DateTime(_startYear, _startMonth, _startDay, _startHour, _startMinute, 0);

            if (_productType == 3 || _productType == 4)    //Get end time
            {
                Array.Copy(bytes, yearIdx + 10, tbytes, 0, 2);
                _endYear = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, yearIdx + 12, tbytes, 0, 2);
                _endMonth = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, yearIdx + 14, tbytes, 0, 2);
                _endDay = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, yearIdx + 16, tbytes, 0, 2);
                _endHour = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, yearIdx + 18, tbytes, 0, 2);
                _endMinute = BitConverter.ToInt16(tbytes, 0);
                if (_endYear > 0)
                {
                    ETime = new DateTime(_endYear, _endMonth, _endDay, _endHour, _endMinute, 0);
                }
            }

            if (_productType == 3)    //Get grid parameters
            {
                Array.Copy(bytes, yearIdx + 20, tbytes, 0, 2);
                _ulLatitude = BitConverter.ToInt16(tbytes, 0);
                _ulLatitude = _ulLatitude / 100;
                Array.Copy(bytes, yearIdx + 22, tbytes, 0, 2);
                _ulLongitude = BitConverter.ToInt16(tbytes, 0);
                _ulLongitude = _ulLongitude / 100;
                Array.Copy(bytes, yearIdx + 24, tbytes, 0, 2);
                _lrLatitude = BitConverter.ToInt16(tbytes, 0);
                _lrLatitude = _lrLatitude / 100;
                Array.Copy(bytes, yearIdx + 26, tbytes, 0, 2);
                _lrLongitude = BitConverter.ToInt16(tbytes, 0);
                _lrLongitude = _lrLongitude / 100;
                Array.Copy(bytes, yearIdx + 28, tbytes, 0, 2);
                _unitGrid = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, yearIdx + 30, tbytes, 0, 2);
                _spaceLonGrid = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, yearIdx + 32, tbytes, 0, 2);
                _spaceLatGrid = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, yearIdx + 34, tbytes, 0, 2);
                _numLonGrid = BitConverter.ToInt16(tbytes, 0);
                Array.Copy(bytes, yearIdx + 36, tbytes, 0, 2);
                _numLatGrid = BitConverter.ToInt16(tbytes, 0);

                CalCoordinate_3();
            }

            if (_productType == 1)
            {
                GetProjection(bytes);
            }

            //Close file
            br.Close();
            fs.Close();

            //Set variable list
            VarList = new List <string>();
            List <Variable> variables = new List <Variable>();
            Variable        var;

            switch (_productType)
            {
            case 1:
            case 2:
            case 3:
                VarList.Add("var");
                var      = new Variable();
                var.Name = "var";
                var.SetDimension(this.YDimension);
                var.SetDimension(this.XDimension);
                variables.Add(var);
                break;

            case 4:
                VarList.Add("Pressure");
                VarList.Add("WindDirection");
                VarList.Add("WindSpeed");
                VarList.Add("Temperature");
                VarList.Add("Slope");
                VarList.Add("Correlation");
                VarList.Add("MiddleRow");
                VarList.Add("MiddleCol");
                VarList.Add("FirstRow");
                VarList.Add("FirstCol");
                VarList.Add("LastRow");
                VarList.Add("LastCol");
                VarList.Add("BrightTemp");
                foreach (string vName in VarList)
                {
                    var           = new Variable();
                    var.Name      = vName;
                    var.IsStation = true;
                    variables.Add(var);
                }

                FieldList = new List <string>();
                FieldList.AddRange(new string[] { "Stid", "Longitude", "Latitude" });
                FieldList.AddRange(VarList);
                break;
            }
            this.Variables = variables;
        }
Esempio n. 16
0
        /// <summary>
        /// Read MICAPS 2 data info
        /// </summary>
        /// <param name="aFile">file path</param>
        public override void ReadDataInfo(string aFile)
        {
            StreamReader sr = new StreamReader(aFile, Encoding.Default);
            string       aLine;

            string[]              dataArray;
            int                   i, n, LastNonEmpty, dataNum;
            List <string>         dataList    = new List <string>();
            List <List <string> > disDataList = new List <List <string> >();

            //Read file head
            FileName    = aFile;
            aLine       = sr.ReadLine();
            Description = aLine;
            aLine       = sr.ReadLine();
            dataArray   = aLine.Split();
            dataList.Clear();
            for (i = 0; i < dataArray.Length; i++)
            {
                if (dataArray[i] != string.Empty)
                {
                    dataList.Add(dataArray[i]);
                }
            }
            if (dataList.Count < 6)
            {
                aLine     = sr.ReadLine();
                dataArray = aLine.Split();
                for (i = 0; i < dataArray.Length; i++)
                {
                    if (dataArray[i] != string.Empty)
                    {
                        dataList.Add(dataArray[i]);
                    }
                }
            }
            //DateTime = DateTime.ParseExact(dataList[0] + "-" + dataList[1] + "-" + dataList[2] +
            //    " " + dataList[3] + ":00", "yy-MM-dd HH:mm", null);
            int year = int.Parse(dataList[0]);

            if (year < 100)
            {
                if (year < 50)
                {
                    year = 2000 + year;
                }
                else
                {
                    year = 1900 + year;
                }
            }
            DateTime = new DateTime(year, int.Parse(dataList[1]), int.Parse(dataList[2]), int.Parse(dataList[3]), 0, 0);

            Level = int.Parse(dataList[4]);
            StNum = int.Parse(dataList[5]);

            Dimension tdim = new Dimension(DimensionType.T);

            tdim.DimValue.Add(DataConvert.ToDouble(DateTime));
            tdim.DimLength     = 1;
            this.TimeDimension = tdim;
            Dimension zdim = new Dimension(DimensionType.Z);

            zdim.DimValue.Add(Level);
            zdim.DimLength = 1;
            List <Variable> variables = new List <Variable>();

            foreach (string vName in VarList)
            {
                Variable var = new Variable();
                var.Name      = vName;
                var.IsStation = true;
                var.SetDimension(tdim);
                var.SetDimension(zdim);
                variables.Add(var);
            }
            this.Variables = variables;

            //Read data
            dataNum = 0;
            do
            {
                aLine = sr.ReadLine();
                if (aLine == null)
                {
                    break;
                }
                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 < 10)
                    {
                        aLine = sr.ReadLine();
                        if (aLine == null)
                        {
                            break;
                        }
                        dataArray    = aLine.Split();
                        LastNonEmpty = -1;
                        for (i = 0; i < dataArray.Length; i++)
                        {
                            if (dataArray[i] != string.Empty)
                            {
                                LastNonEmpty++;
                                dataList.Add(dataArray[i]);
                            }
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                if (dataList.Count < 10)
                {
                    break;
                }

                dataNum++;
                if (dataNum == 1)
                {
                    VarNum = dataList.Count;
                }
                disDataList.Add(dataList);
                dataList = new List <string>();
            }while (aLine != null);

            sr.Close();

            DataList = disDataList;
        }
Esempio n. 17
0
        /// <summary>
        /// Read data info
        /// </summary>
        /// <param name="aFile">file path</param>
        public override void ReadDataInfo(string aFile)
        {
            this.FileName = aFile;

            FileStream   fs = new FileStream(aFile, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);

            int headerType;
            int headerRecordLength;

            //Read primary header
            _primaryHeader.Header_Type          = br.ReadByte();
            _primaryHeader.Header_Record_Length = Bytes2Number.Uint2(br);
            _primaryHeader.File_Type_Code       = br.ReadByte();
            if (_primaryHeader.File_Type_Code != 0)
            {
                return;
            }

            _primaryHeader.Total_Header_Length = Bytes2Number.UInt(br.ReadBytes(4));
            _primaryHeader.Data_Field_Length   = Bytes2Number.UInt(br.ReadBytes(8));
            _dataLength = (int)(br.BaseStream.Length - br.BaseStream.Position);

            //Read secondary headers
            while (true)
            {
                headerType = br.ReadByte();
                if (br.BaseStream.Position > _primaryHeader.Total_Header_Length)
                {
                    break;
                }

                if (headerType > 132)
                {
                    break;
                }

                switch (headerType)
                {
                case 1:
                    //Read header type#1 - Image Structure
                    _imageStructure.Header_Type          = headerType;
                    _imageStructure.Header_Record_Length = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageStructure.NB = br.ReadByte();
                    _imageStructure.NC = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageStructure.NL = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageStructure.Compression_Flag = br.ReadByte();
                    break;

                case 2:
                    //Read header type#2 - Image Navigation
                    _imageNavigation.Header_Type          = headerType;
                    _imageNavigation.Header_Record_Length = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageNavigation.Projection_Name      = ASCIIEncoding.ASCII.GetString(br.ReadBytes(32)).Trim();
                    _imageNavigation.CFAC = Bytes2Number.Int4(br);
                    _imageNavigation.LFAC = Bytes2Number.Int4(br);
                    _imageNavigation.COFF = Bytes2Number.Int4(br);
                    _imageNavigation.LOFF = Bytes2Number.Int4(br);
                    //_imageNavigation.CFAC = BitConverter.ToInt32(br.ReadBytes(4), 0);
                    //_imageNavigation.LFAC = BitConverter.ToInt32(br.ReadBytes(4), 0);
                    //_imageNavigation.COFF = BitConverter.ToInt32(br.ReadBytes(4), 0);
                    //_imageNavigation.LOFF = BitConverter.ToInt32(br.ReadBytes(4), 0);
                    break;

                case 3:
                    //Read header type#3 - Image Data Function
                    _imageDataFunction.Header_Type           = headerType;
                    _imageDataFunction.Header_Record_Length  = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageDataFunction.Data_Definition_Block = ASCIIEncoding.ASCII.GetString(br.ReadBytes(_imageDataFunction.Header_Record_Length - 3));
                    break;

                case 4:
                    //Read header type#4 - Annotation
                    _annotation.Header_Type          = headerType;
                    _annotation.Header_Record_Length = Bytes2Number.UInt(br.ReadBytes(2));
                    _annotation.Annotation_Text      = ASCIIEncoding.ASCII.GetString(br.ReadBytes(_annotation.Header_Record_Length - 3));
                    break;

                case 5:
                    //Read header type#5 - Time Stamp
                    _timeStamp.Header_Type          = headerType;
                    _timeStamp.Header_Record_Length = Bytes2Number.UInt(br.ReadBytes(2));
                    _timeStamp.CDS_P_Field          = br.ReadByte();
                    _timeStamp.CDS_T_Field          = Bytes2Number.UInt(br.ReadBytes(6));
                    break;

                case 128:
                    //Read header type#128 - Image Segment Identification
                    _imageSegmentID.Header_Type          = headerType;
                    _imageSegmentID.Header_Record_Length = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageSegmentID.Image_Segm_Seq_No    = br.ReadByte();
                    _imageSegmentID.Total_No_Image_Segm  = br.ReadByte();
                    _imageSegmentID.Line_No_Image_Segm   = Bytes2Number.UInt(br.ReadBytes(2));
                    break;

                case 130:        //Read header type#130 - Image compensation information header
                    _imageCompInfo.Header_Type                    = headerType;
                    _imageCompInfo.Header_Record_Length           = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageCompInfo.Image_Compensation_Information = ASCIIEncoding.ASCII.GetString(br.ReadBytes(_imageCompInfo.Header_Record_Length - 3));
                    break;

                case 131:        //Read header type#131 - Image observation time
                    _imageObsTime.Header_Type            = headerType;
                    _imageObsTime.Header_Record_Length   = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageObsTime.Image_Observation_Time = ASCIIEncoding.ASCII.GetString(br.ReadBytes(_imageObsTime.Header_Record_Length - 3));
                    break;

                case 132:        //Read header type#132 - Image quality information
                    _imageQualityInfo.Header_Type               = headerType;
                    _imageQualityInfo.Header_Record_Length      = Bytes2Number.UInt(br.ReadBytes(2));
                    _imageQualityInfo.Image_Quality_Information = ASCIIEncoding.ASCII.GetString(br.ReadBytes(_imageQualityInfo.Header_Record_Length - 3));
                    break;

                default:
                    headerRecordLength = Bytes2Number.UInt(br.ReadBytes(2));
                    br.ReadBytes(headerRecordLength - 3);
                    break;
                }
            }

            //Close file
            br.Close();
            fs.Close();

            //Get projection
            GetProjection(_imageNavigation.Projection_Name);

            int tNL = _imageStructure.NL * _imageSegmentID.Total_No_Image_Segm;

            double[] x      = new double[XNum];
            double[] y      = new double[tNL];
            double   cof    = Math.Pow(2, -16);
            double   CFAC_d = _imageNavigation.CFAC * cof;
            double   LFAC_d = _imageNavigation.LFAC * cof;
            double   radius = 6378137.0;
            int      i;

            for (i = 0; i < XNum; i++)
            {
                x[i] = (double)(i + 1 - _imageNavigation.COFF) / CFAC_d * radius / 10;
            }

            for (i = 0; i < tNL; i++)
            {
                y[i] = (double)(i + 1 - _imageNavigation.LOFF) / LFAC_d * radius / 10;
            }

            Dimension xdim = new Dimension(DimensionType.X);

            xdim.SetValues(x);
            this.XDimension = xdim;
            Dimension ydim = new Dimension(DimensionType.Y);

            ydim.SetValues(y);
            this.YDimension = ydim;

            //Set variable list
            varList = new List <string>();
            varList.Add("var");
            Variable var = new Variable();

            var.Name = "var";
            var.SetDimension(ydim);
            var.SetDimension(xdim);
            List <Variable> variables = new List <Variable>();

            variables.Add(var);
            this.Variables = variables;
        }