Exemplo n.º 1
0
        /// <summary>
        /// Convert MICAPS1 data to GrADS station data
        /// </summary>
        /// <param name="inFile"></param>
        /// <param name="outFile"></param>
        public void MICAPS1ToGrADS(string inFile, string outFile)
        {
            MICAPS1DataInfo aDataInfo  = new MICAPS1DataInfo();
            GrADSDataInfo   CGrADSData = new GrADSDataInfo();

            aDataInfo = ReadMicaps1(inFile);
            CGrADSData.WriteGrADSStationData(outFile, aDataInfo);
            CGrADSData.WriteGrADSCtlFile_Station(outFile, aDataInfo);
        }
Exemplo n.º 2
0
        private void B_Convert_Click(object sender, EventArgs e)
        {
            //Check data folder
            string dataFolder = TB_DataFolder.Text;

            if (!Directory.Exists(dataFolder))
            {
                MessageBox.Show("The data folder is not exist!" + Environment.NewLine +
                                dataFolder, "Error");
                return;
            }

            //Check start/end time
            DateTime sTime = DTP_Start.Value;
            DateTime eTime = DTP_End.Value;

            if (eTime < sTime)
            {
                MessageBox.Show("End time is early than start time!", "Error");
                return;
            }
            int    tIncrement    = int.Parse(TB_Increment.Text);
            string incrementUnit = CB_Increment.Text;
            int    timeNum       = (eTime - sTime).Days + 1;

            //Set output file
            SaveFileDialog aDLG = new SaveFileDialog();

            aDLG.Filter = "GrADS Control File (*.ctl)|*.ctl";
            if (aDLG.ShowDialog() == DialogResult.OK)
            {
                string cFile = aDLG.FileName;
                string dFile = Path.ChangeExtension(cFile, ".dat");

                GrADSDataInfo aDataInfo = new GrADSDataInfo();
                aDataInfo.FileName    = cFile;
                aDataInfo.DSET        = dFile;
                aDataInfo.TITLE       = "OMI AI data";
                aDataInfo.DTYPE       = "GRIDDED";
                aDataInfo.XDEF.Type   = "LINEAR";
                aDataInfo.XDEF.XNum   = 360;
                aDataInfo.XDEF.XMin   = -179.5f;
                aDataInfo.XDEF.XDelt  = 1.0f;
                aDataInfo.YDEF.Type   = "LINEAR";
                aDataInfo.YDEF.YNum   = 180;
                aDataInfo.YDEF.YMin   = -89.5f;
                aDataInfo.YDEF.YDelt  = 1.0f;
                aDataInfo.ZDEF.Type   = "LINEAR";
                aDataInfo.ZDEF.ZNum   = 1;
                aDataInfo.ZDEF.SLevel = 1;
                aDataInfo.ZDEF.ZDelt  = 1;
                aDataInfo.TDEF.Type   = "LINEAR";
                aDataInfo.TDEF.TNum   = timeNum;
                aDataInfo.TDEF.STime  = sTime;
                aDataInfo.TDEF.TDelt  = "1dy";
                Variable aVar = new Variable();
                aVar.Name = "AI";
                //aVar.LevelNum = 0;
                aVar.Units       = "99";
                aVar.Description = "OMI AI";
                aDataInfo.VARDEF.AddVar(aVar);
                aDataInfo.MissingValue = -999;

                FileStream   fs = new FileStream(dFile, FileMode.Create, FileAccess.Write);
                BinaryWriter bw = new BinaryWriter(fs);

                //Time loop
                DateTime aTime = sTime;
                string   inFile;
                int      fNum = 0;
                while (aTime.Date <= eTime.Date)
                {
                    inFile = Path.Combine(dataFolder, "L3_aersl_omi_" + aTime.ToString("yyyyMMdd") + ".txt");
                    if (File.Exists(inFile))
                    {
                        fNum += 1;

                        //Read grid data from OMI AI data file
                        double[,] gridData = new double[180, 360];
                        StreamReader sr = new StreamReader(inFile);
                        sr.ReadLine();
                        sr.ReadLine();
                        sr.ReadLine();
                        string aLine   = sr.ReadLine();
                        string dataStr = string.Empty;
                        int    yNum    = 0;
                        while (aLine != null)
                        {
                            aLine   = aLine.Substring(1);
                            dataStr = dataStr + aLine;
                            if (aLine.Contains("lat"))
                            {
                                for (int i = 0; i < 360; i++)
                                {
                                    string dStr = dataStr.Substring(i * 3, 3);
                                    if (dStr == "888" || dStr == "999")
                                    {
                                        gridData[yNum, i] = aDataInfo.MissingValue;
                                    }
                                    else
                                    {
                                        gridData[yNum, i] = double.Parse(dStr) / 10;
                                    }
                                }
                                dataStr = string.Empty;
                                yNum++;
                            }

                            aLine = sr.ReadLine();
                        }

                        sr.Close();

                        //Write grid data to GrADS data file
                        aDataInfo.WriteGrADSData_Grid(bw, gridData);
                    }
                    else
                    {
                        aDataInfo.WriteGrADSData_Grid_Null(bw);
                    }

                    aTime = aTime.AddDays(tIncrement);
                }

                bw.Close();
                fs.Close();

                //Write ctl file
                aDataInfo.WriteGrADSCTLFile();
            }
        }
        private void SavGrADSMaskoutFile()
        {
            SaveFileDialog SFDlg = new SaveFileDialog();

            SFDlg.Filter = "GrADS File (*.ctl)|*.ctl";
            if (SFDlg.ShowDialog() == DialogResult.OK)
            {
                string aFile = SFDlg.FileName;
                int    i;
                bool   hasSelShape = _currentLayer.HasSelectedShapes();

                //Get grid set
                PolygonShape aPGS    = new PolygonShape();
                Extent       aExtent = new Extent();
                int          n       = 0;
                for (i = 0; i < _currentLayer.ShapeNum; i++)
                {
                    aPGS = (PolygonShape)_currentLayer.ShapeList[i];
                    if (hasSelShape)
                    {
                        if (!aPGS.Selected)
                        {
                            continue;
                        }
                    }
                    if (n == 0)
                    {
                        aExtent = aPGS.Extent;
                    }
                    else
                    {
                        aExtent = MIMath.GetLagerExtent(aExtent, aPGS.Extent);
                    }
                    n += 1;
                }

                GridDataSetting aGDP = new GridDataSetting();
                aGDP.DataExtent.minX = Math.Floor(aExtent.minX);
                aGDP.DataExtent.maxX = Math.Ceiling(aExtent.maxX);
                aGDP.DataExtent.minY = Math.Floor(aExtent.minY);
                aGDP.DataExtent.maxY = Math.Ceiling(aExtent.maxY);
                aGDP.XNum            = 20;
                aGDP.YNum            = 20;

                frmGridSet aFrmGS = new frmGridSet();
                aFrmGS.SetParameters(aGDP);
                if (aFrmGS.ShowDialog() == DialogResult.OK)
                {
                    aFrmGS.GetParameters(ref aGDP);

                    //Show progressbar
                    this.toolStripProgressBar1.Visible = true;
                    this.toolStripProgressBar1.Value   = 0;
                    this.Cursor = Cursors.WaitCursor;
                    Application.DoEvents();

                    //Get grid data
                    double[,] gridData = new double[aGDP.YNum, aGDP.XNum];
                    int j, p;
                    MeteoInfoC.PointD aPoint = new MeteoInfoC.PointD();
                    double            xSize, ySize;
                    xSize = (aGDP.DataExtent.maxX - aGDP.DataExtent.minX) / (aGDP.XNum - 1);
                    ySize = (aGDP.DataExtent.maxY - aGDP.DataExtent.minY) / (aGDP.YNum - 1);
                    bool isIn = false;
                    for (i = 0; i < aGDP.YNum; i++)
                    {
                        aPoint.Y = aGDP.DataExtent.minY + i * ySize;
                        for (j = 0; j < aGDP.XNum; j++)
                        {
                            aPoint.X = aGDP.DataExtent.minX + j * xSize;
                            isIn     = false;
                            for (p = 0; p < _currentLayer.ShapeNum; p++)
                            {
                                aPGS = (PolygonShape)_currentLayer.ShapeList[p];
                                if (hasSelShape)
                                {
                                    if (!aPGS.Selected)
                                    {
                                        continue;
                                    }
                                }
                                if (MIMath.PointInPolygon(aPGS, aPoint))
                                {
                                    isIn = true;
                                    break;
                                }
                            }
                            if (isIn)
                            {
                                gridData[i, j] = 1;
                            }
                            else
                            {
                                gridData[i, j] = -1;
                            }
                        }
                        this.toolStripProgressBar1.Value = (i + 1) * 100 / aGDP.YNum;
                        Application.DoEvents();
                    }

                    //Get GrADS data info
                    string        dFile     = Path.ChangeExtension(aFile, ".dat");
                    GrADSDataInfo aDataInfo = new GrADSDataInfo();
                    aDataInfo.TITLE       = "Mask data";
                    aDataInfo.DSET        = dFile;
                    aDataInfo.DTYPE       = "GRIDDED";
                    aDataInfo.XDEF.Type   = "LINEAR";
                    aDataInfo.XDEF.XNum   = aGDP.XNum;
                    aDataInfo.XDEF.XMin   = (Single)aGDP.DataExtent.minX;
                    aDataInfo.XDEF.XDelt  = (Single)(xSize);
                    aDataInfo.YDEF.Type   = "LINEAR";
                    aDataInfo.YDEF.YNum   = aGDP.YNum;
                    aDataInfo.YDEF.YMin   = (Single)aGDP.DataExtent.minY;
                    aDataInfo.YDEF.YDelt  = (Single)(ySize);
                    aDataInfo.ZDEF.Type   = "LINEAR";
                    aDataInfo.ZDEF.ZNum   = 1;
                    aDataInfo.ZDEF.SLevel = 1;
                    aDataInfo.ZDEF.ZDelt  = 1;
                    aDataInfo.TDEF.Type   = "LINEAR";
                    aDataInfo.TDEF.TNum   = 1;
                    aDataInfo.TDEF.STime  = DateTime.Now;
                    aDataInfo.TDEF.TDelt  = "1mo";
                    Variable aVar = new Variable();
                    aVar.Name = "mask";
                    //aVar.LevelNum = 0;
                    aVar.Units       = "99";
                    aVar.Description = "background mask data";
                    aDataInfo.VARDEF.AddVar(aVar);

                    //Save files
                    aDataInfo.WriteGrADSCTLFile();
                    aDataInfo.WriteGrADSData_Grid(dFile, gridData);

                    //Hide progressbar
                    this.toolStripProgressBar1.Visible = false;
                    this.Cursor = Cursors.Default;
                }
            }
        }
Exemplo n.º 4
0
        private void B_Convert_Click(object sender, EventArgs e)
        {
            //Check data folder
            string dataFolder = TB_DataFolder.Text;

            if (!Directory.Exists(dataFolder))
            {
                MessageBox.Show("The data folder is not exist!" + Environment.NewLine +
                                dataFolder, "Error");
                return;
            }

            //Check variable list
            if (CLB_Variables.CheckedItems.Count == 0)
            {
                MessageBox.Show("No variable was selected!", "Error");
                return;
            }

            //Check start/end time
            DateTime sTime = DTP_Start.Value;
            DateTime eTime = DTP_End.Value;

            if (eTime < sTime)
            {
                MessageBox.Show("End time is early than start time!", "Error");
                return;
            }

            //Set output file
            SaveFileDialog aDLG = new SaveFileDialog();

            aDLG.Filter = "GrADS binary (*.bin)|*.bin";
            if (aDLG.ShowDialog() == DialogResult.OK)
            {
                string outFile = aDLG.FileName;

                FileStream   fs = new FileStream(outFile, FileMode.Create, FileAccess.Write);
                BinaryWriter bw = new BinaryWriter(fs);

                List <int>    varIdxList  = new List <int>();
                List <string> varNameList = new List <string>();
                for (int i = 0; i < CLB_Variables.CheckedItems.Count; i++)
                {
                    varIdxList.Add(CLB_Variables.Items.IndexOf(CLB_Variables.CheckedItems[i]));
                    varNameList.Add(CLB_Variables.CheckedItems[i].ToString());
                }

                //Time loop
                int      tIncrement    = int.Parse(TB_Increment.Text);
                string   incrementUnit = CB_Increment.Text;
                DateTime aTime         = sTime;
                string   inFile;
                int      fNum = 0;
                //MICAPSData CMICAPSData = new MICAPSData();
                MICAPS1DataInfo aMDataInfo = new MICAPS1DataInfo();
                GrADSDataInfo   CGrADSData = new GrADSDataInfo();
                int             timeNum    = 0;
                while (aTime <= eTime)
                {
                    inFile = Path.Combine(dataFolder, aTime.ToString("yyMMddHH") + ".000");
                    if (File.Exists(inFile))
                    {
                        fNum += 1;
                        //aMDataInfo = CMICAPSData.ReadMicaps1(inFile);
                        aMDataInfo.ReadDataInfo(inFile);
                        CGrADSData.WriteGrADSStationData(bw, aMDataInfo, varIdxList);
                    }
                    else
                    {
                        CGrADSData.WriteGrADSStationDataNull(bw);
                    }

                    if (incrementUnit == "hr")
                    {
                        aTime = aTime.AddHours(tIncrement);
                    }
                    else
                    {
                        aTime = aTime.AddDays(tIncrement);
                    }
                    timeNum += 1;
                }

                bw.Close();
                fs.Close();

                //Write ctl file

                CGrADSData.WriteGrADSCtlFile_Station(outFile, varNameList, aMDataInfo.MissingValue,
                                                     tIncrement.ToString() + incrementUnit, sTime, timeNum);
            }
        }