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