Exemplo n.º 1
0
        public override int GetDataCount()
        {
            var lines = this.Text.Split(new char[] { '\n' });

            var re = new Regex(@"(?<lon>-?\d+([.]\d+)?)[,](?<lat>-?\d+([.]\d+)?)[,](?<alt>-?\d+([.]\d+)?)", RegexOptions.Compiled);

            this._dataItems = new List <DataItem>();

            foreach (var line in lines)
            {
                var match = re.Match(line);
                if (match != null)
                {
                    var inRange  = false;
                    var geometry = new StringBuilder();
                    geometry.Append("LINESTRING ((");

                    while (match.Success)
                    {
                        var lat = double.Parse(match.Result("${lat}"));
                        var lon = double.Parse(match.Result("${lon}"));
                        var alt = double.Parse(match.Result("${alt}"));
                        geometry.AppendFormat("{0} {1} {2},", lon, lat, alt);

                        foreach (var filter in this.Filters)
                        {
                            if (inRange)
                            {
                                break;
                            }

                            inRange = filter.FilterInfo.InRange(lon, lat);
                        }

                        match = match.NextMatch();
                    }

                    geometry.Append(") 0)");

                    if (inRange)
                    {
                        var dataItem = new SpreadsheetDataItem(string.Empty, DateTime.Now.AddHours(-1), DateTime.Now.AddHours(-1 + 1),
                                                               geometry.ToString(),
                                                               System.Drawing.Color.FromArgb(this.Color.A, this.Color.R, this.Color.G, this.Color.B),
                                                               string.Empty,
                                                               string.Empty
                                                               );

                        this._dataItems.Add(dataItem);
                    }
                }
            }

            return(_dataItems.Count);
        }
 private string FormatData(SpreadsheetDataItem data)
 {
     return(string.Join("\t", from k in _columnMaps.Values select k(data)));
 }
Exemplo n.º 3
0
        public List <DataItem> readShapeFile(string filename)
        {
            List <DataItem> dataItems = new List <DataItem>();

            FileStream fs         = new FileStream(filename, FileMode.Open);
            long       fileLength = fs.Length;

            Byte[] data = new Byte[fileLength];
            fs.Read(data, 0, (int)fileLength);
            fs.Close();
            var filecode   = readIntBig(data, 0);
            var filelength = readIntBig(data, 24);
            var version    = readIntLittle(data, 28);
            var shapetype  = readIntLittle(data, 32);
            var xMin       = ReadSignedDouble(data, 36);
            var yMin       = ReadSignedDouble(data, 44);

            yMin = 0 - yMin;
            var xMax = ReadSignedDouble(data, 52);
            var yMax = ReadSignedDouble(data, 60);

            yMax = 0 - yMax;
            var zMin            = ReadSignedDouble(data, 68);
            var zMax            = ReadSignedDouble(data, 76);
            var mMin            = ReadSignedDouble(data, 84);
            var mMax            = ReadSignedDouble(data, 92);
            int currentPosition = 100;

            while (currentPosition < fileLength)
            {
                DataItem dataItem           = null;
                int      recordStart        = currentPosition;
                int      recordNumber       = readIntBig(data, recordStart);
                int      contentLength      = readIntBig(data, recordStart + 4);
                int      recordContentStart = recordStart + 8;
                if (shapetype == 1)
                {
                    int recordShapeType = readIntLittle(data, recordContentStart);
                    var lon             = (float)ReadSignedDouble(data, recordContentStart + 4);
                    var lat             = (float)ReadSignedDouble(data, recordContentStart + 12);

                    dataItem = new SpreadsheetDataItem(string.Empty, DateTime.Now.AddHours(-1), DateTime.Now.AddHours(-1 + 1),
                                                       lat,
                                                       lon,
                                                       0,
                                                       1,
                                                       System.Drawing.Color.FromArgb(this.Color.A, this.Color.R, this.Color.G, this.Color.B),
                                                       string.Empty,
                                                       string.Empty
                                                       );
                }
                else if (shapetype == 3)
                {
                    var geometry = new StringBuilder();
                    geometry.Append("LINESTRING ((");

                    //Line line = new Line();
                    int recordShapeType = readIntLittle(data, recordContentStart);
                    //line.box = new Double[4];
                    //line.box[0] = readDoubleLittle(data, recordContentStart + 4);
                    //line.box[1] = readDoubleLittle(data, recordContentStart + 12);
                    //line.box[2] = readDoubleLittle(data, recordContentStart + 20);
                    //line.box[3] = readDoubleLittle(data, recordContentStart + 28);
                    ReadSignedDouble(data, recordContentStart + 4);
                    ReadSignedDouble(data, recordContentStart + 12);
                    ReadSignedDouble(data, recordContentStart + 20);
                    ReadSignedDouble(data, recordContentStart + 28);
                    //line.numParts = readIntLittle(data, recordContentStart + 36);
                    var numberOfParts = readIntLittle(data, recordContentStart + 36);
                    //line.parts = new int[line.numParts];
                    //line.numPoints = readIntLittle(data, recordContentStart + 40);
                    var numberOfPoints = readIntLittle(data, recordContentStart + 40);
                    //line.points = new PointF[line.numPoints];
                    int partStart = recordContentStart + 44;
                    for (int i = 0; i < numberOfParts; i++)
                    {
                        //line.parts[i] = readIntLittle(data, partStart + i * 4);
                        readIntLittle(data, partStart + i * 4);
                    }

                    int pointStart = recordContentStart + 44 + 4 * numberOfParts;
                    //for (int i = 0; i < line.numPoints; i++)
                    //{
                    //    line.points[i].X = (float)readDoubleLittle(data, pointStart + (i * 16));
                    //    line.points[i].Y = (float)readDoubleLittle(data, pointStart + (i * 16) + 8);
                    //    line.points[i].Y = 0 - line.points[i].Y;
                    //}
                    //lines.Add(line);

                    for (int i = 0; i < numberOfPoints; i++)
                    {
                        var lon = (float)ReadSignedDouble(data, pointStart + (i * 16));
                        var lat = (float)ReadSignedDouble(data, pointStart + (i * 16) + 8);
                        var alt = 0f;
                        geometry.AppendFormat("{0} {1} {2},", lon, lat, alt);
                    }

                    geometry.Append(") 0)");

                    dataItem = new SpreadsheetDataItem(string.Empty, DateTime.Now.AddHours(-1), DateTime.Now.AddHours(-1 + 1),
                                                       geometry.ToString(),
                                                       System.Drawing.Color.FromArgb(this.Color.A, this.Color.R, this.Color.G, this.Color.B),
                                                       string.Empty,
                                                       string.Empty
                                                       );
                }
                //else if (shapetype == 5)
                //{
                //    Polygon polygon = new Polygon();
                //    int recordShapeType = readIntLittle(data, recordContentStart);
                //    polygon.box = new Double[4];
                //    polygon.box[0] = readDoubleLittle(data, recordContentStart + 4);
                //    polygon.box[1] = readDoubleLittle(data, recordContentStart + 12);
                //    polygon.box[2] = readDoubleLittle(data, recordContentStart + 20);
                //    polygon.box[3] = readDoubleLittle(data, recordContentStart + 28);
                //    polygon.numParts = readIntLittle(data, recordContentStart + 36);
                //    polygon.parts = new int[polygon.numParts];
                //    polygon.numPoints = readIntLittle(data, recordContentStart + 40);
                //    polygon.points = new PointF[polygon.numPoints];
                //    int partStart = recordContentStart + 44;
                //    for (int i = 0; i < polygon.numParts; i++)
                //    {
                //        polygon.parts[i] = readIntLittle(data, partStart + i * 4);
                //    }
                //    int pointStart = recordContentStart + 44 + 4 * polygon.numParts;
                //    for (int i = 0; i < polygon.numPoints; i++)
                //    {
                //        polygon.points[i].X = (float)readDoubleLittle(data, pointStart + (i * 16));
                //        polygon.points[i].Y = (float)readDoubleLittle(data, pointStart + (i * 16) + 8);
                //        polygon.points[i].Y = 0 - polygon.points[i].Y;
                //    }
                //    polygons.Add(polygon);
                //}
                currentPosition = recordStart + (4 + contentLength) * 2;
                if (dataItem != null)
                {
                    dataItems.Add(dataItem);
                }
            }

            return(dataItems);
        }
Exemplo n.º 4
0
        public override IEnumerable <DataItem> GetData()
        {
            if (this._analizedDataPoints == null)
            {
                this._analizedDataPoints = this.AnalyzeData();
            }

            var dataItems = new List <DataItem>();

            foreach (var dataPoints in this._analizedDataPoints)
            {
                SpreadsheetDataItem dataItem = null;
                var firstDataPoint           = dataPoints.FirstOrDefault();
                if (firstDataPoint == null)
                {
                    continue;
                }

                var color = this.GetColor(dataPoints);

                if (dataPoints.Count < 2 || this.FrameType == ShapeTypes.Point)
                {
                    dataItem = new SpreadsheetDataItem(firstDataPoint.Text, DateTime.Now.AddHours(-1), DateTime.Now,
                                                       firstDataPoint.Latitude,
                                                       firstDataPoint.Longitude,
                                                       firstDataPoint.Altitude,
                                                       0.5f,
                                                       color,
                                                       "marker",
                                                       "http://www.cnn.com"
                                                       );
                }
                else
                {
                    var geometry = new StringBuilder();
                    switch (this.FrameType)
                    {
                    case ShapeTypes.Linestring:
                        geometry.Append("LINESTRING ((");
                        break;

                    case ShapeTypes.Polygon:
                        geometry.Append("POLYGON ((");
                        break;

                    default:
                        break;
                    }

                    foreach (var dataPoint in dataPoints)
                    {
                        geometry.AppendFormat("{0} {1} {2},", dataPoint.Longitude, dataPoint.Latitude, dataPoint.Altitude);
                    }
                    geometry.AppendFormat("{0} {1} {2}) 0)", firstDataPoint.Longitude, firstDataPoint.Latitude, firstDataPoint.Altitude);

                    dataItem = new SpreadsheetDataItem(firstDataPoint.Text, DateTime.Now.AddHours(-1), DateTime.Now,
                                                       geometry.ToString(),
                                                       color,
                                                       "marker",
                                                       "http://www.cnn.com"
                                                       );
                }

                dataItems.Add(dataItem);
            }

            return(dataItems);
        }