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; } }
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(); } }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }