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