private void SaveShapeFile()
        {
            SaveFileDialog SFDlg = new SaveFileDialog();

            SFDlg.Filter = "Shape File (*.shp)|*.shp";
            if (SFDlg.ShowDialog() == DialogResult.OK)
            {
                //ProgressBar
                toolStripProgressBar1.Visible = true;
                this.Cursor = Cursors.WaitCursor;

                string aFile = SFDlg.FileName;

                //Create a VectorLayer with selected shapes
                int         i, j;
                VectorLayer aLayer = new VectorLayer(_currentLayer.ShapeType);
                for (i = 0; i < _currentLayer.NumFields; i++)
                {
                    aLayer.EditAddField(_currentLayer.Fields[i].ColumnName, _currentLayer.Fields[i].DataType);
                }
                bool hasSelShape = _currentLayer.HasSelectedShapes();

                for (i = 0; i < _currentLayer.ShapeNum; i++)
                {
                    Shape aPS = _currentLayer.ShapeList[i];
                    if (hasSelShape)
                    {
                        if (!aPS.Selected)
                        {
                            continue;
                        }
                    }
                    int sNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPS, sNum))
                    {
                        for (j = 0; j < aLayer.NumFields; j++)
                        {
                            aLayer.EditCellValue(j, sNum, _currentLayer.GetCellValue(j, i));
                        }
                    }

                    Application.DoEvents();
                    this.toolStripProgressBar1.Value = (i + 1) * 100 / _currentLayer.ShapeNum;
                }

                aLayer.ProjInfo = _currentLayer.ProjInfo;
                aLayer.SaveFile(aFile);

                //Progressbar
                this.toolStripProgressBar1.Value   = 0;
                this.toolStripProgressBar1.Visible = false;
                this.Cursor = Cursors.Default;
            }
        }
Ejemplo n.º 2
0
        private void B_AddData_Click(object sender, EventArgs e)
        {
            if (CB_LonFld.Text == "" || CB_LatFld.Text == "")
            {
                MessageBox.Show("All fields should be set!", "Alarm");
                return;
            }

            SaveFileDialog saveDlg = new SaveFileDialog();
            string         shpFile;

            saveDlg.Filter = "shp file (*.shp)|*.shp";
            if (saveDlg.ShowDialog() == DialogResult.OK)
            {
                shpFile = saveDlg.FileName;
                if (System.IO.File.Exists(shpFile))
                {
                    string lPathNoExt = System.IO.Path.GetDirectoryName(shpFile) + @"\" + System.IO.Path.GetFileNameWithoutExtension(shpFile);
                    System.IO.File.Delete(lPathNoExt + ".shp");
                    System.IO.File.Delete(lPathNoExt + ".shx");
                    System.IO.File.Delete(lPathNoExt + ".dbf");
                    System.IO.File.Delete(lPathNoExt + ".prj");
                }

                //New layer
                VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);
                aLayer.LayerDrawType = LayerDrawType.Map;
                aLayer.LayerName     = System.IO.Path.GetFileName(shpFile);
                aLayer.FileName      = shpFile;
                aLayer.LegendScheme  = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Black, 5);
                aLayer.Visible       = true;

                int lonIdx, latIdx;
                lonIdx = CB_LonFld.SelectedIndex;
                latIdx = CB_LatFld.SelectedIndex;
                double lon, lat;

                StreamReader sr = new StreamReader(m_Infile, System.Text.Encoding.UTF8);
                string[]     dataArray;
                string       aLine = sr.ReadLine(); //First line - title
                //Get field list
                List <string> fieldList = new List <string>();
                dataArray = aLine.Split(',');
                if (dataArray.Length < 3)
                {
                    MessageBox.Show("The data should have at least three fields!", "Error");
                    return;
                }
                fieldList = new List <string>(dataArray.Length);
                fieldList.AddRange(dataArray);

                //Judge field type
                List <string> varList = new List <string>();
                aLine     = sr.ReadLine(); //First data line
                dataArray = aLine.Split(',');
                for (int i = 3; i < dataArray.Length; i++)
                {
                    if (MeteoInfoC.Global.MIMath.IsNumeric(dataArray[i]))
                    {
                        varList.Add(fieldList[i]);
                    }
                }


                //Add fields
                for (int i = 0; i < fieldList.Count; i++)
                {
                    DataColumn aDC = new DataColumn();
                    aDC.ColumnName = fieldList[i];
                    if (varList.Contains(fieldList[i]))
                    {
                        aDC.DataType = typeof(double);
                    }
                    else
                    {
                        aDC.DataType = typeof(string);
                    }
                    aLayer.EditAddField(aDC);
                }

                //Read data
                //aLine = sr.ReadLine();
                while (aLine != null)
                {
                    dataArray = aLine.Split(',');
                    if (dataArray.Length < 2)
                    {
                        aLine = sr.ReadLine();
                        continue;
                    }

                    MeteoInfoC.PointD aPoint = new MeteoInfoC.PointD();
                    lon      = double.Parse(dataArray[lonIdx]);
                    lat      = double.Parse(dataArray[latIdx]);
                    aPoint.X = lon;
                    aPoint.Y = lat;

                    //Add shape
                    PointShape aPS = new PointShape();
                    aPS.Point = aPoint;
                    int shapeNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPS, shapeNum))
                    {
                        //Edit record value
                        for (int j = 0; j < fieldList.Count; j++)
                        {
                            if (varList.Contains(fieldList[j]))
                            {
                                aLayer.EditCellValue(fieldList[j], shapeNum, double.Parse(dataArray[j]));
                            }
                            else
                            {
                                aLayer.EditCellValue(fieldList[j], shapeNum, dataArray[j]);
                            }
                        }
                    }

                    aLine = sr.ReadLine();
                }

                //Save shape file
                ShapeFileManage.SaveShapeFile(shpFile, aLayer);

                //Add layer
                frmMain.CurrentWin.MapDocument.ActiveMapFrame.AddLayer(aLayer);
                frmMain.CurrentWin.MapDocument.ActiveMapFrame.MapView.PaintLayers();
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Read MICAPS map
        /// </summary>
        /// <param name="aFile">file name</param>
        public static VectorLayer ReadMapFile_MICAPS(string aFile)
        {
            StreamReader sr = new StreamReader(aFile);
            string       aLine;

            string[]      dataArray;
            int           i, LastNonEmpty, lineNum, pNum;
            int           lType, isClose;
            List <PointD> pList = new List <PointD>();
            //PointD aPoint;
            ArrayList     dataList = new ArrayList();
            PolylineShape aPolyline;

            VectorLayer aLayer     = new VectorLayer(ShapeTypes.Polyline);
            string      columnName = "Value";
            DataColumn  aDC        = new DataColumn(columnName, typeof(int));

            aLayer.EditAddField(aDC);

            lineNum = 0;
            lType   = 0;
            isClose = 0;
            aLine   = sr.ReadLine().Trim();
            if (aLine.Substring(0, 7) != "March 9")
            {
                MessageBox.Show("Data format is wrong!" + Environment.NewLine +
                                "Need MICAPS (March 9) data!", "Error");
                return(null);
            }
            aLine = sr.ReadLine();
            while (aLine != null)
            {
                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]);
                    }
                }

                if (dataList.Count != 2)
                {
                    pNum    = Convert.ToInt32(dataList[0]);
                    lType   = Convert.ToInt32(dataList[1]);
                    isClose = Convert.ToInt32(dataList[2]);
                    if (pList.Count > 0)
                    {
                        //if (isClose == 1)
                        //{
                        aPolyline          = new PolylineShape();
                        aPolyline.value    = lineNum;
                        aPolyline.Points   = pList;
                        aPolyline.Extent   = MIMath.GetPointsExtent(pList);
                        aPolyline.PartNum  = 1;
                        aPolyline.parts    = new int[1];
                        aPolyline.parts[0] = 0;

                        int shapeNum = aLayer.ShapeNum;
                        if (aLayer.EditInsertShape(aPolyline, shapeNum))
                        {
                            aLayer.EditCellValue(columnName, shapeNum, lineNum);
                        }

                        lineNum++;
                        //}
                        pList.Clear();
                    }
                }
                else
                {
                    PointD aPoint = new PointD();
                    aPoint.X = Convert.ToDouble(dataList[0]);
                    aPoint.Y = Convert.ToDouble(dataList[1]);
                    pList.Add(aPoint);
                }
            }
            //if (isClose == 1)
            //{
            aPolyline        = new PolylineShape();
            aPolyline.value  = lineNum;
            aPolyline.Extent = MIMath.GetPointsExtent(pList);
            aPolyline.Points = pList;

            int sNum = aLayer.ShapeNum;

            if (aLayer.EditInsertShape(aPolyline, sNum))
            {
                aLayer.EditCellValue(columnName, sNum, lineNum);
            }


            sr.Close();

            aLayer.LayerName     = Path.GetFileName(aFile);
            aLayer.FileName      = aFile;
            aLayer.LayerDrawType = LayerDrawType.Map;
            aLayer.LegendScheme  = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Polyline, Color.DarkGray, 1.0F);
            aLayer.Visible       = true;

            return(aLayer);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Read Surfer BLN map
        /// </summary>
        /// <param name="aFile">file path</param>
        /// <returns>vector layer</returns>
        public static VectorLayer ReadMapFile_BLN(string aFile)
        {
            StreamReader sr = new StreamReader(aFile);
            string       aLine;

            string[]      dataArray;
            int           i, j, pNum;
            List <PointD> pList = new List <PointD>();
            PointD        aPoint;
            ArrayList     dataList   = new ArrayList();
            bool          IsTrue     = false;
            string        columnName = "Value";
            VectorLayer   aLayer     = new VectorLayer(ShapeTypes.Polyline);

            //Read data
            aLayer.EditAddField(new DataColumn(columnName, typeof(int)));
            aLine = sr.ReadLine();
            bool isComma = true;

            if (!aLine.Contains(","))
            {
                isComma = false;
            }

            i = 0;
            while (aLine != null)
            {
                if (isComma)
                {
                    pNum = int.Parse(aLine.Split(',')[0]);
                }
                else
                {
                    pNum = int.Parse(MIMath.SplitBySpace(aLine)[0]);
                }
                pList = new List <PointD>();
                for (j = 0; j < pNum; j++)
                {
                    aLine = sr.ReadLine();
                    if (isComma)
                    {
                        dataArray = aLine.Split(',');
                    }
                    else
                    {
                        dataArray = MIMath.SplitBySpace(aLine);
                    }
                    aPoint   = new PointD();
                    aPoint.X = Convert.ToDouble(dataArray[0]);
                    aPoint.Y = Convert.ToDouble(dataArray[1]);
                    pList.Add(aPoint);
                }
                PolylineShape aPLS = new PolylineShape();
                aPLS.value  = i;
                aPLS.Extent = MIMath.GetPointsExtent(pList);
                aPLS.Points = pList;
                i          += 1;

                int sNum = aLayer.ShapeNum;
                if (aLayer.EditInsertShape(aPLS, sNum))
                {
                    aLayer.EditCellValue(columnName, sNum, i);
                }

                aLine = sr.ReadLine();
            }

            aLayer.LayerName     = Path.GetFileName(aFile);
            aLayer.FileName      = aFile;
            aLayer.LayerDrawType = LayerDrawType.Map;
            aLayer.LegendScheme  = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Polyline, Color.DarkGray, 1.0F);
            aLayer.Visible       = true;
            IsTrue = true;

            sr.Close();

            if (IsTrue)
            {
                return(aLayer);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Read GrADS map
        /// </summary>
        /// <param name="aFile"></param>
        /// <returns></returns>
        public static VectorLayer ReadMapFile_GrADS(string aFile)
        {
            FileStream   fs = new FileStream(aFile, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            int          i, lineNum;
            byte         b;
            Int16        N, lType;
            double       lon, lat;

            byte[] bytes;

            PointD        aPoint;
            List <PointD> pList = new List <PointD>();

            VectorLayer aLayer     = new VectorLayer(ShapeTypes.Polyline);
            string      columnName = "Value";
            DataColumn  aDC        = new DataColumn(columnName, typeof(int));

            aLayer.EditAddField(aDC);

            lineNum = 0;
            do
            {
                b = br.ReadByte();    // 1-data, 2-skip
                if (Convert.ToString(b) == "2")
                {
                    br.ReadBytes(18);
                    continue;
                }
                b     = br.ReadByte(); // Line type: country, river ...
                lType = Convert.ToInt16(b);
                b     = br.ReadByte(); // Point number
                N     = Convert.ToInt16(b);
                for (i = 0; i < N; i++)
                {
                    bytes = br.ReadBytes(3);    //Longitude
                    int val = bytes[0] << 16 | bytes[1] << 8 | bytes[2];
                    lon = val / 10000.0;

                    bytes = br.ReadBytes(3);    //Latitude
                    val   = bytes[0] << 16 | bytes[1] << 8 | bytes[2];
                    lat   = val / 10000.0 - 90.0;

                    aPoint   = new PointD();
                    aPoint.X = lon;
                    aPoint.Y = lat;
                    pList.Add(aPoint);
                }
                if (pList.Count > 1)
                {
                    //if (N < 255)
                    //{
                    PolylineShape aPolyline = new PolylineShape();
                    aPolyline.value    = lineNum;
                    aPolyline.Points   = pList;
                    aPolyline.Extent   = MIMath.GetPointsExtent(pList);
                    aPolyline.PartNum  = 1;
                    aPolyline.parts    = new int[1];
                    aPolyline.parts[0] = 0;

                    int shapeNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPolyline, shapeNum))
                    {
                        aLayer.EditCellValue(columnName, shapeNum, lineNum);
                    }

                    lineNum++;
                    //}
                }
                pList = new List <PointD>();
            } while (br.BaseStream.Position < br.BaseStream.Length);

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

            aLayer.LayerName     = Path.GetFileName(aFile);
            aLayer.FileName      = aFile;
            aLayer.LayerDrawType = LayerDrawType.Map;
            aLayer.LegendScheme  = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Polyline, Color.DarkGray, 1.0F);
            aLayer.Visible       = true;

            return(aLayer);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Read HYSPLIT trajectory data and create a trajectory point layer
        /// </summary>
        /// <returns>vector layer</returns>
        public VectorLayer CreateTrajPointLayer()
        {
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);

            aLayer.EditAddField(new System.Data.DataColumn("TrajID", typeof(int)));
            aLayer.EditAddField(new System.Data.DataColumn("Date", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("Lon", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("Lat", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("Height", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("Pressure", typeof(double)));
            bool isMultiVar = false;

            if (VarNums[0] > 1)
            {
                isMultiVar = true;
                for (int v = 1; v < VarNums[0]; v++)
                {
                    aLayer.EditAddField(new System.Data.DataColumn(VarNames[0][v], typeof(double)));
                }
            }

            int TrajNum = 0;

            for (int t = 0; t < FileNames.Count; t++)
            {
                string        aFile = FileNames[t];
                FileStream    fs    = new FileStream(aFile, FileMode.Open, FileAccess.Read);
                StreamReader  sr    = new StreamReader(fs);
                string        aLine;
                string[]      dataArray;
                List <string> dataList = new List <string>();
                int           i, LastNonEmpty;

                //Record #1
                aLine = sr.ReadLine();

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

                //Record #3
                aLine = sr.ReadLine();

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

                //Record #5
                aLine = sr.ReadLine();

                //Record #6
                int TrajIdx;
                List <List <object> >         pList = new List <List <object> >();
                List <List <List <object> > > PointList = new List <List <List <object> > >();
                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    pList = new List <List <object> >();
                    PointList.Add(pList);
                }
                PointD    aPoint    = new PointD();
                ArrayList polylines = new ArrayList();
                DateTime  aDate;
                double    Height, Press;
                while (true)
                {
                    aLine = sr.ReadLine();
                    if (aLine == null || aLine == "")
                    {
                        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]);
                        }
                    }
                    List <object> dList = new List <object>();
                    TrajIdx = int.Parse(dataList[0]) - 1;
                    aDate   = DateTime.Parse(dataList[2] + "-" + dataList[3] + "-" +
                                             dataList[4] + " " + dataList[5] + ":00");
                    aPoint   = new PointD();
                    aPoint.X = double.Parse(dataList[10]);
                    aPoint.Y = double.Parse(dataList[9]);
                    Height   = double.Parse(dataList[11]);
                    Press    = double.Parse(dataList[12]);
                    dList.Add(aPoint);
                    dList.Add(aDate);
                    dList.Add(Height);
                    dList.Add(Press);
                    if (isMultiVar)
                    {
                        for (i = 13; i < dataList.Count; i++)
                        {
                            dList.Add(double.Parse(dataList[i]));
                        }
                    }
                    PointList[TrajIdx].Add(dList);
                }

                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    TrajNum += 1;
                    for (int j = 0; j < PointList[i].Count; j++)
                    {
                        PointShape aPS = new PointShape();
                        aPS.Value = TrajNum;
                        aPS.Point = (PointD)PointList[i][j][0];
                        int shapeNum = aLayer.ShapeNum;
                        if (aLayer.EditInsertShape(aPS, shapeNum))
                        {
                            aLayer.EditCellValue("TrajID", shapeNum, TrajNum);
                            aLayer.EditCellValue("Date", shapeNum, ((DateTime)PointList[i][j][1]).ToString("yyyyMMddHH"));
                            aLayer.EditCellValue("Lat", shapeNum, aPS.Point.Y);
                            aLayer.EditCellValue("Lon", shapeNum, aPS.Point.X);
                            aLayer.EditCellValue("Height", shapeNum, (double)PointList[i][j][2]);
                            aLayer.EditCellValue("Pressure", shapeNum, (double)PointList[i][j][3]);
                            if (isMultiVar)
                            {
                                for (int v = 1; v < VarNums[0]; v++)
                                {
                                    aLayer.EditCellValue(VarNames[0][v], shapeNum, (double)PointList[i][j][3 + v]);
                                }
                            }
                        }
                    }
                }

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

            aLayer.LayerName     = "Trajectory_Points";
            aLayer.LayerDrawType = LayerDrawType.TrajLine;
            //aLayer.LegendScheme = m_Legend.CreateSingleSymbolLegendScheme(Shape.ShapeType.Polyline, Color.Blue, 1.0F, 1, aDataInfo.TrajeoryNum);
            aLayer.Visible = true;
            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Red, 5.0F);

            aLS.FieldName       = "TrajID";
            aLayer.LegendScheme = aLS;

            return(aLayer);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Read WMP map
        /// </summary>
        /// <param name="aFile"></param>
        /// <returns></returns>
        public static VectorLayer ReadMapFile_WMP(string aFile)
        {
            StreamReader sr = new StreamReader(aFile);
            string       aLine;
            string       shapeType;

            string[]      dataArray;
            int           shapeNum;
            int           i, j, pNum;
            List <PointD> pList = new List <PointD>();
            PointD        aPoint;
            ArrayList     dataList   = new ArrayList();
            bool          IsTrue     = false;
            string        columnName = "Value";
            VectorLayer   aLayer     = new VectorLayer(ShapeTypes.Point);

            //Read shape type
            shapeType = sr.ReadLine().Trim();
            //Read shape number
            shapeNum = Convert.ToInt32(sr.ReadLine());
            switch (shapeType.ToLower())
            {
            case "point":
                aLayer = new VectorLayer(ShapeTypes.Point);
                aLayer.EditAddField(new DataColumn(columnName, typeof(int)));

                for (i = 0; i < shapeNum; i++)
                {
                    aLine     = sr.ReadLine();
                    dataArray = aLine.Split(',');
                    aPoint    = new PointD();
                    aPoint.X  = Convert.ToDouble(dataArray[0]);
                    aPoint.Y  = Convert.ToDouble(dataArray[1]);
                    pList.Add(aPoint);
                    PointShape aPS = new PointShape();
                    aPS.Value = i;
                    aPS.Point = aPoint;

                    int sNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPS, sNum))
                    {
                        aLayer.EditCellValue(columnName, sNum, i);
                    }
                }

                aLayer.LayerName     = Path.GetFileName(aFile);
                aLayer.FileName      = aFile;
                aLayer.LayerDrawType = LayerDrawType.Map;
                aLayer.LegendScheme  = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Black, 5);
                aLayer.Visible       = true;
                IsTrue = true;
                break;

            case "polyline":
                aLayer = new VectorLayer(ShapeTypes.Polyline);
                aLayer.EditAddField(new DataColumn(columnName, typeof(int)));

                for (i = 0; i < shapeNum; i++)
                {
                    pNum  = Convert.ToInt32(sr.ReadLine());
                    pList = new List <PointD>();
                    for (j = 0; j < pNum; j++)
                    {
                        aLine     = sr.ReadLine();
                        dataArray = aLine.Split(',');
                        aPoint    = new PointD();
                        aPoint.X  = Convert.ToDouble(dataArray[0]);
                        aPoint.Y  = Convert.ToDouble(dataArray[1]);
                        pList.Add(aPoint);
                    }
                    PolylineShape aPLS = new PolylineShape();
                    aPLS.value  = i;
                    aPLS.Extent = MIMath.GetPointsExtent(pList);
                    aPLS.Points = pList;

                    int sNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPLS, sNum))
                    {
                        aLayer.EditCellValue(columnName, sNum, i);
                    }
                }

                aLayer.LayerName     = Path.GetFileName(aFile);
                aLayer.FileName      = aFile;
                aLayer.LayerDrawType = LayerDrawType.Map;
                aLayer.LegendScheme  = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Polyline, Color.DarkGray, 1.0F);
                aLayer.Visible       = true;
                IsTrue = true;
                break;

            case "polygon":
                aLayer = new VectorLayer(ShapeTypes.Polygon);
                aLayer.EditAddField(new DataColumn(columnName, typeof(int)));

                ArrayList polygons = new ArrayList();
                for (i = 0; i < shapeNum; i++)
                {
                    pNum  = Convert.ToInt32(sr.ReadLine());
                    pList = new List <PointD>();
                    for (j = 0; j < pNum; j++)
                    {
                        aLine     = sr.ReadLine();
                        dataArray = aLine.Split(',');
                        aPoint    = new PointD();
                        aPoint.X  = Convert.ToDouble(dataArray[0]);
                        aPoint.Y  = Convert.ToDouble(dataArray[1]);
                        pList.Add(aPoint);
                    }
                    PolygonShape aPGS = new PolygonShape();
                    aPGS.lowValue  = i;
                    aPGS.highValue = i;
                    aPGS.Extent    = MIMath.GetPointsExtent(pList);
                    aPGS.Points    = pList;

                    int sNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPGS, sNum))
                    {
                        aLayer.EditCellValue(columnName, sNum, i);
                    }
                }

                aLayer.LayerName     = Path.GetFileName(aFile);
                aLayer.FileName      = aFile;
                aLayer.LayerDrawType = LayerDrawType.Map;
                aLayer.LegendScheme  = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Polygon, Color.FromArgb(255, 251, 195), 1.0F);
                aLayer.Visible       = true;
                IsTrue = true;
                break;

            default:
                MessageBox.Show("Shape type is invalid!" + Environment.NewLine +
                                shapeType, "Error");
                IsTrue = false;
                break;
            }

            sr.Close();

            if (IsTrue)
            {
                return(aLayer);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Read HYSPLIT trajectory data and create a trajectory start point layer
        /// </summary>
        /// <returns>vector layer</returns>
        public VectorLayer CreateTrajStartPointLayer()
        {
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);

            aLayer.EditAddField(new System.Data.DataColumn("TrajID", typeof(int)));
            aLayer.EditAddField(new System.Data.DataColumn("StartDate", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("StartLon", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("StartLat", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("StartHeight", typeof(double)));

            int TrajNum = 0;

            for (int t = 0; t < FileNames.Count; t++)
            {
                string        aFile = FileNames[t];
                FileStream    fs    = new FileStream(aFile, FileMode.Open, FileAccess.Read);
                StreamReader  sr    = new StreamReader(fs);
                string        aLine;
                string[]      dataArray;
                List <string> dataList = new List <string>();
                int           i, LastNonEmpty;

                //Record #1
                aLine = sr.ReadLine();

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

                //Record #3
                aLine = sr.ReadLine();

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

                //Record #5
                aLine = sr.ReadLine();

                //Record #6
                int           TrajIdx;
                List <object> pList     = new List <object>();
                List <PointD> PointList = new List <PointD>();
                PointD        aPoint    = new PointD();
                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    PointList.Add(aPoint);
                }

                ArrayList polylines = new ArrayList();
                while (true)
                {
                    aLine = sr.ReadLine();
                    if (aLine == null || aLine == "")
                    {
                        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]);
                        }
                    }
                    if (float.Parse(dataList[8]) == 0)
                    {
                        TrajIdx            = int.Parse(dataList[0]) - 1;
                        aPoint             = new PointD();
                        aPoint.X           = double.Parse(dataList[10]);
                        aPoint.Y           = double.Parse(dataList[9]);
                        PointList[TrajIdx] = aPoint;
                    }
                }

                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    PointShape aPS = new PointShape();
                    TrajNum  += 1;
                    aPS.Value = TrajNum;
                    aPS.Point = PointList[i];

                    int shapeNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPS, shapeNum))
                    {
                        aLayer.EditCellValue("TrajID", shapeNum, TrajNum);
                        aLayer.EditCellValue("StartDate", shapeNum, TrajInfos[t][i].StartTime.ToString("yyyyMMddHH"));
                        aLayer.EditCellValue("StartLat", shapeNum, TrajInfos[t][i].StartLat);
                        aLayer.EditCellValue("StartLon", shapeNum, TrajInfos[t][i].StartLon);
                        aLayer.EditCellValue("StartHeight", shapeNum, TrajInfos[t][i].StartHeight);
                    }
                }

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

            aLayer.LayerName     = "Trajectory_Start_Points";
            aLayer.LayerDrawType = LayerDrawType.TrajPoint;
            aLayer.Visible       = true;
            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Black, 8.0F);

            aLS.FieldName       = "TrajID";
            aLayer.LegendScheme = aLS;

            return(aLayer);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Read HYSPLIT trajectory data and create a polyline layer
        /// </summary>
        /// <returns>vector layer</returns>
        public VectorLayer CreateTrajLineLayer()
        {
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Polyline);

            aLayer.EditAddField(new System.Data.DataColumn("TrajID", typeof(int)));
            aLayer.EditAddField(new System.Data.DataColumn("StartDate", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("StartLon", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("StartLat", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("StartHeight", typeof(double)));

            int TrajNum = 0;

            for (int t = 0; t < FileNames.Count; t++)
            {
                string        aFile = FileNames[t];
                FileStream    fs    = new FileStream(aFile, FileMode.Open, FileAccess.Read);
                StreamReader  sr    = new StreamReader(fs);
                string        aLine;
                string[]      dataArray;
                List <string> dataList = new List <string>();
                int           i, LastNonEmpty;

                //Record #1
                aLine = sr.ReadLine();

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

                //Record #3
                aLine = sr.ReadLine();

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

                //Record #5
                aLine = sr.ReadLine();

                //Record #6
                int                   TrajIdx;
                List <PointD>         pList     = new List <PointD>();
                List <List <PointD> > PointList = new List <List <PointD> >();
                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    pList = new List <PointD>();
                    PointList.Add(pList);
                }
                PointD    aPoint    = new PointD();
                ArrayList polylines = new ArrayList();
                while (true)
                {
                    aLine = sr.ReadLine();
                    if (aLine == null || aLine == "")
                    {
                        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]);
                        }
                    }
                    TrajIdx  = int.Parse(dataList[0]) - 1;
                    aPoint   = new PointD();
                    aPoint.X = double.Parse(dataList[10]);
                    aPoint.Y = double.Parse(dataList[9]);

                    if (PointList[TrajIdx].Count > 1)
                    {
                        PointD oldPoint = PointList[TrajIdx][PointList[TrajIdx].Count - 1];
                        if (Math.Abs(aPoint.X - oldPoint.X) > 100)
                        {
                            if (aPoint.X > oldPoint.X)
                            {
                                aPoint.X -= 360;
                            }
                            else
                            {
                                aPoint.X += 360;
                            }
                        }
                    }
                    PointList[TrajIdx].Add(aPoint);
                }

                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    Shape.PolylineShape aPolyline = new Shape.PolylineShape();
                    //aPolyline.value = aDataInfo.TrajInfos[i].StartTime.ToBinary();
                    TrajNum         += 1;
                    aPolyline.value  = TrajNum;
                    aPolyline.Points = PointList[i];
                    aPolyline.Extent = MIMath.GetPointsExtent(aPolyline.Points);

                    int shapeNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPolyline, shapeNum))
                    {
                        aLayer.EditCellValue("TrajID", shapeNum, TrajNum);
                        aLayer.EditCellValue("StartDate", shapeNum, TrajInfos[t][i].StartTime.ToString("yyyyMMddHH"));
                        aLayer.EditCellValue("StartLat", shapeNum, TrajInfos[t][i].StartLat);
                        aLayer.EditCellValue("StartLon", shapeNum, TrajInfos[t][i].StartLon);
                        aLayer.EditCellValue("StartHeight", shapeNum, TrajInfos[t][i].StartHeight);
                    }
                }

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

            aLayer.LayerName     = "Trajectory_Lines";
            aLayer.LayerDrawType = LayerDrawType.TrajLine;
            //aLayer.LegendScheme = m_Legend.CreateSingleSymbolLegendScheme(Shape.ShapeType.Polyline, Color.Blue, 1.0F, 1, aDataInfo.TrajeoryNum);
            aLayer.Visible = true;
            LegendScheme aLS = LegendManage.CreateUniqValueLegendScheme(aLayer, 1, TrajeoryNumber);

            aLS.FieldName       = "TrajID";
            aLayer.LegendScheme = aLS;

            return(aLayer);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Read MICAPS 7 data and create a trajectory point layer
        /// </summary>
        /// <returns>vector layer</returns>
        public VectorLayer CreateTrajPointLayer()
        {
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);

            aLayer.EditAddField(new System.Data.DataColumn("TrajID", typeof(int)));
            aLayer.EditAddField(new System.Data.DataColumn("Date", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("PreHour", typeof(int)));
            aLayer.EditAddField(new System.Data.DataColumn("Lon", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("Lat", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("WindSpeed", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("Radius_W7", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("Radius_W10", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("MoveDir", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("MoveSpeed", typeof(double)));

            int TrajNum = 0;

            for (int t = 0; t < FileNames.Count; t++)
            {
                string        aFile = FileNames[t];
                FileStream    fs    = new FileStream(aFile, FileMode.Open, FileAccess.Read);
                StreamReader  sr    = new StreamReader(fs);
                string        aLine;
                string[]      dataArray;
                List <string> dataList = new List <string>();
                int           i, LastNonEmpty;

                //
                int TrajIdx = -1;
                List <List <object> >         pList     = new List <List <object> >();
                List <List <List <object> > > PointList = new List <List <List <object> > >();
                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    pList = new List <List <object> >();
                    PointList.Add(pList);
                }
                PointD    aPoint    = new PointD();
                ArrayList polylines = new ArrayList();
                DateTime  aDate;
                aLine = sr.ReadLine();
                aLine = sr.ReadLine();
                while (aLine != null)
                {
                    if (aLine.Trim() == String.Empty)
                    {
                        aLine = sr.ReadLine();
                        continue;
                    }
                    dataArray    = aLine.Split();
                    LastNonEmpty = -1;
                    dataList.Clear();
                    for (i = 0; i < dataArray.Length; i++)
                    {
                        if (dataArray[i] != string.Empty)
                        {
                            LastNonEmpty++;
                            dataList.Add(dataArray[i]);
                        }
                    }
                    switch (dataList.Count)
                    {
                    case 4:
                        TrajIdx += 1;
                        break;

                    case 13:
                        List <object> dList = new List <object>();
                        aDate = DateTime.Parse(dataList[0] + "-" + dataList[1] + "-" +
                                               dataList[2] + " " + dataList[3] + ":00");
                        aPoint   = new PointD();
                        aPoint.X = double.Parse(dataList[5]);
                        aPoint.Y = double.Parse(dataList[6]);
                        dList.Add(aPoint);
                        dList.Add(aDate);
                        dList.Add(int.Parse(dataList[4]));
                        for (int d = 0; d < 5; d++)
                        {
                            dList.Add(double.Parse(dataList[d + 7]));
                        }
                        PointList[TrajIdx].Add(dList);
                        break;
                    }

                    aLine = sr.ReadLine();
                }

                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    TrajNum += 1;
                    for (int j = 0; j < PointList[i].Count; j++)
                    {
                        PointShape aPS = new PointShape();
                        aPS.Value = TrajNum;
                        aPS.Point = (PointD)PointList[i][j][0];
                        int shapeNum = aLayer.ShapeNum;
                        if (aLayer.EditInsertShape(aPS, shapeNum))
                        {
                            aLayer.EditCellValue("TrajID", shapeNum, TrajNum);
                            aLayer.EditCellValue("Date", shapeNum, ((DateTime)PointList[i][j][1]).ToString("yyyyMMddHH"));
                            aLayer.EditCellValue("PreHour", shapeNum, (int)PointList[i][j][2]);
                            aLayer.EditCellValue("Lat", shapeNum, aPS.Point.Y);
                            aLayer.EditCellValue("Lon", shapeNum, aPS.Point.X);
                            aLayer.EditCellValue("WindSpeed", shapeNum, (double)PointList[i][j][3]);
                            aLayer.EditCellValue("Radius_W7", shapeNum, (double)PointList[i][j][4]);
                            aLayer.EditCellValue("Radius_W10", shapeNum, (double)PointList[i][j][5]);
                            aLayer.EditCellValue("MoveDir", shapeNum, (double)PointList[i][j][6]);
                            aLayer.EditCellValue("MoveSpeed", shapeNum, (double)PointList[i][j][7]);
                        }
                    }
                }

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

            aLayer.LayerName     = "Typhoon_Points";
            aLayer.LayerDrawType = LayerDrawType.TrajLine;
            //aLayer.LegendScheme = m_Legend.CreateSingleSymbolLegendScheme(Shape.ShapeType.Polyline, Color.Blue, 1.0F, 1, aDataInfo.TrajeoryNum);
            aLayer.Visible = true;
            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Red, 5.0F);

            aLS.FieldName       = "TrajID";
            aLayer.LegendScheme = aLS;

            return(aLayer);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Read MICAPS 7 data and create a trajectory start point layer
        /// </summary>
        /// <returns>vector layer</returns>
        public VectorLayer CreateTrajStartPointLayer()
        {
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Point);

            aLayer.EditAddField(new System.Data.DataColumn("TrajID", typeof(int)));
            aLayer.EditAddField(new System.Data.DataColumn("StartDate", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("StartLon", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("StartLat", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("StartHeight", typeof(double)));

            int TrajNum = 0;

            for (int t = 0; t < FileNames.Count; t++)
            {
                string        aFile = FileNames[t];
                FileStream    fs    = new FileStream(aFile, FileMode.Open, FileAccess.Read);
                StreamReader  sr    = new StreamReader(fs);
                string        aLine;
                string[]      dataArray;
                List <string> dataList = new List <string>();
                int           i, LastNonEmpty;

                //
                int           TrajIdx   = -1;
                List <object> pList     = new List <object>();
                List <PointD> PointList = new List <PointD>();
                PointD        aPoint    = new PointD();
                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    PointList.Add(aPoint);
                }

                ArrayList polylines = new ArrayList();
                aLine = sr.ReadLine();
                aLine = sr.ReadLine();
                bool IsFirstTraj = false;
                while (aLine != null)
                {
                    if (aLine.Trim() == String.Empty)
                    {
                        aLine = sr.ReadLine();
                        continue;
                    }
                    dataArray    = aLine.Split();
                    LastNonEmpty = -1;
                    dataList.Clear();
                    for (i = 0; i < dataArray.Length; i++)
                    {
                        if (dataArray[i] != string.Empty)
                        {
                            LastNonEmpty++;
                            dataList.Add(dataArray[i]);
                        }
                    }
                    switch (dataList.Count)
                    {
                    case 4:
                        TrajIdx    += 1;
                        IsFirstTraj = true;
                        break;

                    case 13:
                        if (IsFirstTraj)
                        {
                            aPoint             = new PointD();
                            aPoint.X           = double.Parse(dataList[5]);
                            aPoint.Y           = double.Parse(dataList[6]);
                            PointList[TrajIdx] = aPoint;
                            IsFirstTraj        = false;
                        }
                        break;
                    }

                    aLine = sr.ReadLine();
                }

                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    PointShape aPS = new PointShape();
                    TrajNum  += 1;
                    aPS.Value = TrajNum;
                    aPS.Point = PointList[i];

                    int shapeNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPS, shapeNum))
                    {
                        aLayer.EditCellValue("TrajID", shapeNum, TrajNum);
                        aLayer.EditCellValue("StartDate", shapeNum, TrajInfos[t][i].StartTime.ToString("yyyyMMddHH"));
                        aLayer.EditCellValue("StartLat", shapeNum, TrajInfos[t][i].StartLat);
                        aLayer.EditCellValue("StartLon", shapeNum, TrajInfos[t][i].StartLon);
                        aLayer.EditCellValue("StartHeight", shapeNum, TrajInfos[t][i].StartHeight);
                    }
                }

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

            aLayer.LayerName     = "Typhoon_Start_Points";
            aLayer.LayerDrawType = LayerDrawType.TrajPoint;
            aLayer.Visible       = true;
            LegendScheme aLS = LegendManage.CreateSingleSymbolLegendScheme(ShapeTypes.Point, Color.Black, 8.0F);

            aLS.FieldName       = "TrajID";
            aLayer.LegendScheme = aLS;

            return(aLayer);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Read MICAPS 7 data and create a polyline layer
        /// </summary>
        /// <returns>vector layer</returns>
        public VectorLayer CreateTrajLineLayer()
        {
            VectorLayer aLayer = new VectorLayer(ShapeTypes.Polyline);

            aLayer.EditAddField(new System.Data.DataColumn("TrajIndex", typeof(int)));
            aLayer.EditAddField(new System.Data.DataColumn("TrajName", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("TrajID", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("TrajCenter", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("StartDate", typeof(string)));
            aLayer.EditAddField(new System.Data.DataColumn("StartLon", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("StartLat", typeof(double)));
            aLayer.EditAddField(new System.Data.DataColumn("StartHeight", typeof(double)));

            int TrajNum = 0;

            for (int t = 0; t < FileNames.Count; t++)
            {
                string        aFile = FileNames[t];
                FileStream    fs    = new FileStream(aFile, FileMode.Open, FileAccess.Read);
                StreamReader  sr    = new StreamReader(fs);
                string        aLine;
                string[]      dataArray;
                List <string> dataList = new List <string>();
                int           i, LastNonEmpty;

                int                   TrajIdx   = -1;
                List <PointD>         pList     = new List <PointD>();
                List <List <PointD> > PointList = new List <List <PointD> >();
                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    pList = new List <PointD>();
                    PointList.Add(pList);
                }
                PointD    aPoint    = new PointD();
                ArrayList polylines = new ArrayList();
                aLine = sr.ReadLine();
                aLine = sr.ReadLine();
                while (aLine != null)
                {
                    if (aLine.Trim() == String.Empty)
                    {
                        aLine = sr.ReadLine();
                        continue;
                    }
                    dataArray    = aLine.Split();
                    LastNonEmpty = -1;
                    dataList.Clear();
                    for (i = 0; i < dataArray.Length; i++)
                    {
                        if (dataArray[i] != string.Empty)
                        {
                            LastNonEmpty++;
                            dataList.Add(dataArray[i]);
                        }
                    }
                    switch (dataList.Count)
                    {
                    case 4:
                        TrajIdx += 1;
                        break;

                    case 13:
                        aPoint   = new PointD();
                        aPoint.X = double.Parse(dataList[5]);
                        aPoint.Y = double.Parse(dataList[6]);
                        PointList[TrajIdx].Add(aPoint);
                        break;
                    }

                    aLine = sr.ReadLine();
                }

                for (i = 0; i < TrajeoryNums[t]; i++)
                {
                    Shape.PolylineShape aPolyline = new Shape.PolylineShape();
                    //aPolyline.value = aDataInfo.TrajInfos[i].StartTime.ToBinary();
                    TrajNum         += 1;
                    aPolyline.value  = TrajNum;
                    aPolyline.Points = PointList[i];
                    aPolyline.Extent = MIMath.GetPointsExtent(aPolyline.Points);

                    int shapeNum = aLayer.ShapeNum;
                    if (aLayer.EditInsertShape(aPolyline, shapeNum))
                    {
                        aLayer.EditCellValue("TrajIndex", shapeNum, TrajNum);
                        aLayer.EditCellValue("TrajName", shapeNum, TrajInfos[t][i].TrajName);
                        aLayer.EditCellValue("TrajID", shapeNum, TrajInfos[t][i].TrajID);
                        aLayer.EditCellValue("TrajCenter", shapeNum, TrajInfos[t][i].TrajCenter);
                        aLayer.EditCellValue("StartDate", shapeNum, TrajInfos[t][i].StartTime.ToString("yyyyMMddHH"));
                        aLayer.EditCellValue("StartLat", shapeNum, TrajInfos[t][i].StartLat);
                        aLayer.EditCellValue("StartLon", shapeNum, TrajInfos[t][i].StartLon);
                        aLayer.EditCellValue("StartHeight", shapeNum, TrajInfos[t][i].StartHeight);
                    }
                }

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

            aLayer.LayerName     = "Typhoon_Lines";
            aLayer.LayerDrawType = LayerDrawType.TrajLine;
            //aLayer.LegendScheme = m_Legend.CreateSingleSymbolLegendScheme(Shape.ShapeType.Polyline, Color.Blue, 1.0F, 1, aDataInfo.TrajeoryNum);
            aLayer.Visible = true;
            LegendScheme aLS = LegendManage.CreateUniqValueLegendScheme(aLayer, 1, TrajeoryNumber);

            aLS.FieldName       = "TrajIndex";
            aLayer.LegendScheme = aLS;

            return(aLayer);
        }