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