private void makeTrackpointsDS() { DataTable trackpointsTable; rebuildingTrackpoints = true; string sortOrder = ""; if(m_trackpointsDS != null) { sortOrder = m_trackpointsDS.Tables["trackpoints"].DefaultView.Sort; // we will restore it later m_trackpointsDS.Tables.Clear(); m_trackpointsDS.Dispose(); } trackpointsTable = new DataTable("trackpoints"); DataColumn myDataColumn; // Create new DataColumn, set DataType, ColumnName and add to DataTable. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "id"; myDataColumn.ReadOnly = true; myDataColumn.Unique = true; trackpointsTable.Columns.Add(myDataColumn); // needed to relate waypoint to track myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "trackid"; myDataColumn.ReadOnly = true; trackpointsTable.Columns.Add(myDataColumn); // needed to index waypoint inside a track myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "wptidx"; myDataColumn.ReadOnly = true; trackpointsTable.Columns.Add(myDataColumn); // make column to support checkbox/button myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "view"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "View"; myDataColumn.ReadOnly = false; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create name column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "name"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Name"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create date/time column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "time"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Time"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create location column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "location"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Location"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create track column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "track"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Track"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create source column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "source"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Source"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "displayed"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Display"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Make the ID column the primary key column. DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = trackpointsTable.Columns["id"]; trackpointsTable.PrimaryKey = PrimaryKeyColumns; // Add the new DataTable to the DataSet. m_trackpointsDS = new DataSet(); m_trackpointsDS.Tables.Add(trackpointsTable); // Create DataRow objects and add them to the DataTable DataRow myDataRow; int count = 0; Waypoint prevWpt = null; for (int i = 0; i < PhotoWaypoints.WaypointsWithThumbs.Count; i++) { Waypoint wpt = (Waypoint)PhotoWaypoints.WaypointsWithThumbs.GetByIndex(i); // wpt.Location.Lng, wpt.Location.Lat, wpt.Location.Elev if(wpt != null) { count++; Track trk = WaypointsCache.getTrackById(wpt.TrackId); myDataRow = trackpointsTable.NewRow(); myDataRow["id"] = wpt.Id; myDataRow["trackid"] = wpt.TrackId; myDataRow["wptidx"] = i; // in track string contentOrUrl = (wpt.Desc != null && wpt.Desc.Length > 0) ? "*" : ""; contentOrUrl += (wpt.Url != null && wpt.Url.Length > 0) ? "@" : ""; myDataRow["view"] = false; myDataRow["name"] = contentOrUrl + ((wpt.Name == null || wpt.Name.Length == 0) ? ("" + (i+1)) : wpt.Name); myDataRow["time"] = new SortableDateTime(wpt.DateTime, DateTimeDisplayMode.ConvertToLocal); myDataRow["location"] = wpt.Location.ToStringWithElev(); myDataRow["track"] = trk == null ? "" : trk.Name; myDataRow["source"] = wpt.Source; myDataRow["displayed"] = true; trackpointsTable.Rows.Add(myDataRow); prevWpt = wpt; } } this.messageTrkptLabel.Text = ("total " + count + " track points with photos"); trackpointsTable.RowDeleting += new DataRowChangeEventHandler(this.trackpoints_RowDeleting); trackpointsTable.DefaultView.Sort = sortOrder; if(trackpointsTable.DefaultView.Sort.Length == 0) { trackpointsTable.DefaultView.Sort = "time"; } rebuildingTrackpoints = false; }
private void makeUnrelatedDS() { DataTable unrelatedTable; rebuildingUnrelated = true; string sortOrder = ""; if(m_unrelatedDS != null) { sortOrder = m_unrelatedDS.Tables["unrelated"].DefaultView.Sort; // we will restore it later m_unrelatedDS.Tables.Clear(); m_unrelatedDS.Dispose(); } unrelatedTable = new DataTable("unrelated"); DataColumn myDataColumn; // Create new DataColumn, set DataType, ColumnName and add to DataTable. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "id"; myDataColumn.ReadOnly = true; myDataColumn.Unique = true; unrelatedTable.Columns.Add(myDataColumn); // make column to support checkbox/button myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "view"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "View"; myDataColumn.ReadOnly = false; myDataColumn.Unique = false; unrelatedTable.Columns.Add(myDataColumn); // Create name column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "name"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Name"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; unrelatedTable.Columns.Add(myDataColumn); // Create date/time column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "time"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Time"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; unrelatedTable.Columns.Add(myDataColumn); // Create source column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "source"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Source"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; unrelatedTable.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "displayed"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Display"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; unrelatedTable.Columns.Add(myDataColumn); // Make the ID column the primary key column. DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = unrelatedTable.Columns["id"]; unrelatedTable.PrimaryKey = PrimaryKeyColumns; // Add the new DataTable to the DataSet. m_unrelatedDS = new DataSet(); m_unrelatedDS.Tables.Add(unrelatedTable); // Create DataRow objects and add them to the DataTable DataRow myDataRow; int count = 0; for (int i = 0; i < PhotoWaypoints.PhotosUnrelated.Count; i++) { PhotoDescr pd = (PhotoDescr)PhotoWaypoints.PhotosUnrelated.GetByIndex(i); // wpt.Location.Lng, wpt.Location.Lat, wpt.Location.Elev if(pd != null) { count++; myDataRow = unrelatedTable.NewRow(); myDataRow["id"] = pd.Id; myDataRow["view"] = false; myDataRow["name"] = pd.imageName; myDataRow["time"] = new SortableDateTime(pd.DTOrig, DateTimeDisplayMode.DisplayAsIs); myDataRow["source"] = pd.imageSource; unrelatedTable.Rows.Add(myDataRow); } } this.messageUnrelatedLabel.Text = ("" + count + " photos that couldn't be related to trackpoints"); unrelatedTable.RowDeleting += new DataRowChangeEventHandler(this.unrelated_RowDeleting); unrelatedTable.DefaultView.Sort = sortOrder; if(unrelatedTable.DefaultView.Sort.Length == 0) { unrelatedTable.DefaultView.Sort = "time"; } rebuildingUnrelated = false; }
private void makeWaypointsDS() { DataTable waypointsTable; rebuildingWaypoints = true; string sortOrder = ""; if(m_waypointsDS != null) { sortOrder = m_waypointsDS.Tables["waypoints"].DefaultView.Sort; // we will restore it later m_waypointsDS.Tables.Clear(); m_waypointsDS.Dispose(); } { waypointsTable = new DataTable("waypoints"); DataColumn myDataColumn; // Create new DataColumn, set DataType, ColumnName and add to DataTable. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "id"; myDataColumn.ReadOnly = true; myDataColumn.Unique = true; waypointsTable.Columns.Add(myDataColumn); // Create wptName column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "wptname"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Short Name"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create name column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "urlname"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Url Name"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create desc column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "desc"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Description"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create comment column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "comment"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Comment"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create date/time column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "time"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Time"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create location column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "location"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Location"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create distance from camera column. myDataColumn = new DataColumn(); myDataColumn.DataType = (new Distance(0.0d)).GetType(); myDataColumn.ColumnName = "distance"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Distance"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create symbol column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "sym"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Symbol"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create found column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "found"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Found"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Create source column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "source"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Source"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "displayed"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Display"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; waypointsTable.Columns.Add(myDataColumn); // Make the ID column the primary key column. DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = waypointsTable.Columns["id"]; waypointsTable.PrimaryKey = PrimaryKeyColumns; // Add the new DataTable to the DataSet. m_waypointsDS = new DataSet(); m_waypointsDS.Tables.Add(waypointsTable); } // Create DataRow objects and add them to the DataTable DataRow myDataRow; foreach (Waypoint wpt in WaypointsCache.WaypointsAll) { myDataRow = waypointsTable.NewRow(); myDataRow["id"] = wpt.Id; myDataRow["wptname"] = wpt.WptName; myDataRow["urlname"] = wpt.UrlName; string desc = wpt.Desc.Replace("\n", " ").Replace("\r", ""); desc= desc.Length > 150 ? (desc.Substring(0, 150) + "...") : desc; myDataRow["desc"] = desc; string comment = wpt.Comment.Replace("\n", " ").Replace("\r", ""); comment= comment.Length > 150 ? (comment.Substring(0, 150) + "...") : comment; myDataRow["comment"] = comment; myDataRow["time"] = new SortableDateTime(wpt.DateTime, DateTimeDisplayMode.ConvertToLocal); myDataRow["location"] = wpt.Location.ToStringWithElev(); myDataRow["distance"] = m_cameraManager.Location.distanceFrom(wpt.Location); myDataRow["sym"] = wpt.Sym; myDataRow["found"] = wpt.Found ? "yes" : ""; myDataRow["source"] = wpt.Source; myDataRow["displayed"] = wpt.Enabled; waypointsTable.Rows.Add(myDataRow); } waypointsTable.RowDeleting += new DataRowChangeEventHandler(this.waypoints_RowDeleting); waypointsTable.DefaultView.Sort = sortOrder; if(waypointsTable.DefaultView.Sort.Length == 0) { waypointsTable.DefaultView.Sort = "distance"; } rebuildingWaypoints = false; }
private void makeTracksDS() { DataTable tracksTable; rebuildingTracks = true; // we cannot reuse the table, as boolean "Show" checkboxes will otherwise have their events messed up badly. if(m_tracksDS != null) { m_tracksDS.Dispose(); } tracksTable = new DataTable("tracks"); DataColumn myDataColumn; // Create new DataColumn, set DataType, ColumnName and add to DataTable. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "id"; myDataColumn.ReadOnly = true; myDataColumn.Unique = true; tracksTable.Columns.Add(myDataColumn); // Create name column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "name"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Name"; myDataColumn.ReadOnly = false; myDataColumn.Unique = false; tracksTable.Columns.Add(myDataColumn); // Create distance traveled column. myDataColumn = new DataColumn(); myDataColumn.DataType = (new Distance(0.0d)).GetType(); myDataColumn.ColumnName = "distance"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Distance"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; tracksTable.Columns.Add(myDataColumn); // Create source column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "source"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Source"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; tracksTable.Columns.Add(myDataColumn); // Create "legs" column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "legs"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Legs"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; tracksTable.Columns.Add(myDataColumn); // Create start column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "start"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Start"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; tracksTable.Columns.Add(myDataColumn); // Create end column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "end"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "End"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; tracksTable.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "displayed"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Display"; myDataColumn.ReadOnly = false; myDataColumn.Unique = false; tracksTable.Columns.Add(myDataColumn); // Make the ID column the primary key column. DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = tracksTable.Columns["id"]; tracksTable.PrimaryKey = PrimaryKeyColumns; // Add the new DataTable to the DataSet. m_tracksDS = new DataSet(); m_tracksDS.Tables.Add(tracksTable); tracksTable = m_tracksDS.Tables[0]; tracksTable.ColumnChanging -= new DataColumnChangeEventHandler(this.tracks_ColumnChanging); tracksTable.RowDeleting -= new DataRowChangeEventHandler(this.tracks_RowDeleting); // Create DataRow objects and add them to the DataTable DataRow myDataRow; for (int i = 0; i < WaypointsCache.TracksAll.Count; i++) { Track track = (Track)WaypointsCache.TracksAll[i]; if(!track.isRoute) { myDataRow = tracksTable.NewRow(); myDataRow["id"] = track.Id; Speed dMaxSpeed = new Speed(track.SpeedMax); // meters per hour Speed dMinSpeed = new Speed(track.SpeedMin); // meters per hour Distance dOdometer = new Distance(track.Odometer); // meters myDataRow["name"] = track.Name; string sSpeed = dMinSpeed.ToString() + " to " + dMaxSpeed.ToString(); if(!dMinSpeed.isSane && !dMaxSpeed.isSane) { sSpeed = "n/a"; } myDataRow["source"] = "speed:" + sSpeed + " source: " + track.Source; myDataRow["legs"] = track.Trackpoints.Count; myDataRow["start"] = new SortableDateTime(track.Start, DateTimeDisplayMode.ConvertToLocal); myDataRow["end"] = new SortableDateTime(track.End, DateTimeDisplayMode.ConvertToLocal); myDataRow["distance"] = dOdometer; myDataRow["displayed"] = track.Enabled; tracksTable.Rows.Add(myDataRow); } } tracksTable.ColumnChanging += new DataColumnChangeEventHandler(this.tracks_ColumnChanging); tracksTable.RowDeleting += new DataRowChangeEventHandler(this.tracks_RowDeleting); rebuildingTracks = false; }
private void makeTrackpointsDS(ArrayList selectedTracksRows) { DataTable trackpointsTable; rebuildingTrackpoints = true; string sortOrder = ""; if(m_trackpointsDS != null) { sortOrder = m_trackpointsDS.Tables["trackpoints"].DefaultView.Sort; // we will restore it later m_trackpointsDS.Tables.Clear(); m_trackpointsDS.Dispose(); } trackpointsTable = new DataTable("trackpoints"); DataColumn myDataColumn; // Create new DataColumn, set DataType, ColumnName and add to DataTable. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "id"; myDataColumn.ReadOnly = true; myDataColumn.Unique = true; trackpointsTable.Columns.Add(myDataColumn); // needed to relate waypoint to track myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "trackid"; myDataColumn.ReadOnly = true; trackpointsTable.Columns.Add(myDataColumn); // needed to index waypoint inside a track myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "wptidx"; myDataColumn.ReadOnly = true; trackpointsTable.Columns.Add(myDataColumn); // Create name column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "name"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Name"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create date/time column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "time"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Time"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create location column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "location"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Location"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create elevation column (for graph). myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Double"); myDataColumn.ColumnName = "elevation"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Elevation"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create speed column. myDataColumn = new DataColumn(); myDataColumn.DataType = (new Speed(0.0d)).GetType(); myDataColumn.ColumnName = "speed"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Speed"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create heading column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "heading"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Heading"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create leg distance column. myDataColumn = new DataColumn(); myDataColumn.DataType = (new Distance(0.0d)).GetType(); myDataColumn.ColumnName = "leg"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Leg"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create distance traveled (odometer) column. myDataColumn = new DataColumn(); myDataColumn.DataType = (new Distance(0.0d)).GetType(); myDataColumn.ColumnName = "distance"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Distance"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create track column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "track"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Track"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create source column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "source"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Source"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "displayed"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Display"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create real location column. myDataColumn = new DataColumn(); myDataColumn.DataType = GeoCoord.This.GetType(); myDataColumn.ColumnName = "locationReal"; myDataColumn.AutoIncrement = false; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Create real heading column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Double"); myDataColumn.ColumnName = "headingReal"; myDataColumn.AutoIncrement = false; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; trackpointsTable.Columns.Add(myDataColumn); // Make the ID column the primary key column. DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = trackpointsTable.Columns["id"]; trackpointsTable.PrimaryKey = PrimaryKeyColumns; // Add the new DataTable to the DataSet. m_trackpointsDS = new DataSet(); m_trackpointsDS.Tables.Add(trackpointsTable); // Create DataRow objects and add them to the DataTable DataRow myDataRow; int column = 0; int count = 0; m_elevMax = 0.0d; // meters m_elevMin = 0.0d; bool fromRoutes = this.prevSelectedTab == this.routesTabPage; this.messageTrkptLabel.Text = fromRoutes ? "Routes:" : "Tracks:"; foreach (int row in selectedTracksRows) { long trackId = (long)((int)(fromRoutes ? routesDataGrid[row, column] : tracksDataGrid[row, column])); Track trk = WaypointsCache.getTrackById(trackId); Waypoint prevWpt = null; if(trk != null) { this.messageTrkptLabel.Text += (" " + trk.Name + " "); double odometer = 0.0d; // meters for (int i = 0; i < trk.Trackpoints.Count; i++) { Waypoint wpt = (Waypoint)trk.Trackpoints.GetByIndex(i); Waypoint nextWpt = (i < trk.Trackpoints.Count-1) ? (Waypoint)trk.Trackpoints.GetByIndex(i+1) : null; // wpt.Location.Lng, wpt.Location.Lat, wpt.Location.Elev if(wpt != null) { count++; myDataRow = trackpointsTable.NewRow(); myDataRow["id"] = wpt.Id; myDataRow["trackid"] = trackId; myDataRow["wptidx"] = i; // in track string contentOrUrl = (wpt.Desc != null && wpt.Desc.Length > 0) ? "*" : ""; contentOrUrl += (wpt.Url != null && wpt.Url.Length > 0) ? "@" : ""; string name = contentOrUrl; name += ((wpt.Name == null || wpt.Name.Length == 0) ? ("" + (i+1)) : wpt.Name); if(wpt.WptName.Length > 0 && !name.ToLower().StartsWith(wpt.WptName.ToLower())) // avoid duplicates like "2: 2" { name += ": " + wpt.WptName; } myDataRow["name"] = name.Trim(); myDataRow["time"] = new SortableDateTime(wpt.DateTime, DateTimeDisplayMode.ConvertToLocal); myDataRow["location"] = wpt.Location.ToStringWithElev(); myDataRow["locationReal"] = new GeoCoord(wpt.Location); double elev = wpt.Location.Elev; myDataRow["elevation"] = elev; m_elevMax = Math.Max(m_elevMax, elev); m_elevMin = Math.Min(m_elevMin, elev); Speed speed = null; Distance leg = null; if(prevWpt != null) { // compute odometer and speed: TimeSpan dt = wpt.DateTime - prevWpt.DateTime; leg = wpt.Location.distanceFrom(prevWpt.Location); // meters double legMeters = leg.Meters; odometer += legMeters; double legMetersPerHour = legMeters * 36000000000.0d / dt.Ticks; // meters per hour if(!fromRoutes && legMetersPerHour > 1000.0d && legMetersPerHour < 330.0d * 3600.0d) // sanity check - speed of sound, m/hr { wpt.Speed = (float)legMetersPerHour; if(wpt.Speed > trk.SpeedMax) { trk.SpeedMax = wpt.Speed; } if(wpt.Speed < trk.SpeedMin) { trk.SpeedMin = wpt.Speed; } speed = new Speed(legMetersPerHour); } } wpt.Odometer = (float)odometer; myDataRow["speed"] = speed == null ? new Speed(-1.0d) : speed; double variation = Math.Round(wpt.Location.magneticVariation()); double headingTrue = (nextWpt == null || wpt.Location.sameAs(nextWpt.Location)) ? 999.0d : (wpt.Location.bearing(nextWpt.Location) * 180.0d / Math.PI); double headingMagn = (headingTrue == 999.0d) ? 999.0d : ((headingTrue + variation + 360.0d) % 360.0d); myDataRow["headingReal"] = headingMagn; myDataRow["heading"] = (headingTrue == 999.0d) ? "" : String.Format("{0:000}°", Math.Round(headingMagn)); myDataRow["leg"] = leg == null ? new Distance(0.0d) : leg; myDataRow["distance"] = new Distance(odometer); myDataRow["track"] = trk.Name; myDataRow["source"] = wpt.Source; myDataRow["displayed"] = true; trackpointsTable.Rows.Add(myDataRow); prevWpt = wpt; } } } } this.messageTrkptLabel.Text += (" - total " + count + " points"); trackpointsTable.RowDeleting += new DataRowChangeEventHandler(this.trackpoints_RowDeleting); trackpointsTable.DefaultView.Sort = sortOrder; if(trackpointsTable.DefaultView.Sort.Length == 0) { trackpointsTable.DefaultView.Sort = "time"; } rebuildingTrackpoints = false; }
private void makeRoutesDS() { DataTable routesTable; rebuildingRoutes = true; // we cannot reuse the table, as boolean "Show" checkboxes will otherwise have their events messed up badly. if(m_routesDS != null) { m_routesDS.Dispose(); } routesTable = new DataTable("routes"); DataColumn myDataColumn; // Create new DataColumn, set DataType, ColumnName and add to DataTable. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "id"; myDataColumn.ReadOnly = true; myDataColumn.Unique = true; routesTable.Columns.Add(myDataColumn); // Create name column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "name"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Name"; myDataColumn.ReadOnly = false; myDataColumn.Unique = false; routesTable.Columns.Add(myDataColumn); // Create source column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "source"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Source"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; routesTable.Columns.Add(myDataColumn); // Create "legs" column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "legs"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Legs"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; routesTable.Columns.Add(myDataColumn); // Create start column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "start"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Start"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; routesTable.Columns.Add(myDataColumn); // Create end column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "end"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "End"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; routesTable.Columns.Add(myDataColumn); myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "displayed"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Display"; myDataColumn.ReadOnly = false; myDataColumn.Unique = false; routesTable.Columns.Add(myDataColumn); // Make the ID column the primary key column. DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = routesTable.Columns["id"]; routesTable.PrimaryKey = PrimaryKeyColumns; // Add the new DataTable to the DataSet. m_routesDS = new DataSet(); m_routesDS.Tables.Add(routesTable); routesTable = m_routesDS.Tables[0]; // Create DataRow objects and add them to the DataTable DataRow myDataRow; for (int i = 0; i < WaypointsCache.TracksAll.Count; i++) { Track route = (Track)WaypointsCache.TracksAll[i]; if(route.isRoute) { myDataRow = routesTable.NewRow(); myDataRow["id"] = route.Id; Distance dOdometer = new Distance(route.Odometer); // meters myDataRow["name"] = route.Name; myDataRow["source"] = "" + dOdometer.ToString() + " source: " + route.Source; myDataRow["legs"] = route.Trackpoints.Count - 1; myDataRow["start"] = new SortableDateTime(route.Start, DateTimeDisplayMode.ConvertToLocal); myDataRow["end"] = new SortableDateTime(route.End, DateTimeDisplayMode.ConvertToLocal); myDataRow["displayed"] = route.Enabled; routesTable.Rows.Add(myDataRow); } } // now make sure the event handlers are in place: routesTable.ColumnChanging += new DataColumnChangeEventHandler(this.routes_ColumnChanging); routesTable.RowDeleting += new DataRowChangeEventHandler(this.routes_RowDeleting); rebuildingRoutes = false; }
private void makeEqDS(bool useFilter) { DataTable eqTable; if(m_eqDS == null) { eqTable = new DataTable("eq"); DataColumn myDataColumn; // Create new DataColumn, set DataType, ColumnName and add to DataTable. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Int32"); myDataColumn.ColumnName = "id"; myDataColumn.ReadOnly = true; myDataColumn.Unique = true; eqTable.Columns.Add(myDataColumn); // Create magn column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.Double"); myDataColumn.ColumnName = "magn"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Magn"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; eqTable.Columns.Add(myDataColumn); // Create location column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "location"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Location"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; eqTable.Columns.Add(myDataColumn); // Create quality column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "quality"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Quality"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; eqTable.Columns.Add(myDataColumn); // Create comment column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "comment"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Comment"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; eqTable.Columns.Add(myDataColumn); // Create time column. myDataColumn = new DataColumn(); myDataColumn.DataType = sortableDateTime.GetType(); myDataColumn.ColumnName = "time"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Time"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; eqTable.Columns.Add(myDataColumn); // Create displayed column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); //myDataColumn.DataType = System.Type.GetType("System.Boolean"); myDataColumn.ColumnName = "displayed"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Shown"; myDataColumn.ReadOnly = false; myDataColumn.Unique = false; eqTable.Columns.Add(myDataColumn); // Create source column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "source"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "Source"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; eqTable.Columns.Add(myDataColumn); // Create url column. myDataColumn = new DataColumn(); myDataColumn.DataType = System.Type.GetType("System.String"); myDataColumn.ColumnName = "url"; myDataColumn.AutoIncrement = false; myDataColumn.Caption = "URL"; myDataColumn.ReadOnly = true; myDataColumn.Unique = false; eqTable.Columns.Add(myDataColumn); // Make the ID column the primary key column. DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = eqTable.Columns["id"]; eqTable.PrimaryKey = PrimaryKeyColumns; // Add the new DataTable to the DataSet. m_eqDS = new DataSet(); m_eqDS.Tables.Add(eqTable); } ArrayList src = null; switch(m_scope) { case 0: // world src = EarthquakesCache.EarthquakesAll; break; default: case 1: // visible on map src = EarthquakesCache.EarthquakesDisplayed; break; case 2: // selected in graph or filtered in grid src = EarthquakesCache.EarthquakesDisplayed; break; } eqTable = m_eqDS.Tables[0]; eqTable.Rows.Clear(); // Create DataRow objects and add them to the DataTable dsUseUtcTime = Project.useUtcTime; // also memorize how the DS was created DataRow myDataRow; for (int i = 0; i < src.Count; i++) { Earthquake eq = (Earthquake)src[i]; if(!useFilter || useFilter && TimeMagnitudeFilter.passesAll(eq.DateTime, eq.Magn)) { myDataRow = eqTable.NewRow(); myDataRow["id"] = eq.Id; myDataRow["magn"] = eq.Magn; myDataRow["location"] = eq.Location.ToString(); myDataRow["quality"] = eq.Quality; myDataRow["comment"] = eq.Comment; myDataRow["time"] = new SortableDateTime(dsUseUtcTime ? eq.DateTime : Project.zuluToLocal(eq.DateTime)); myDataRow["displayed"] = eq.Enabled ? "yes" : "no"; myDataRow["source"] = eq.Source; myDataRow["url"] = eq.Url; try { eqTable.Rows.Add(myDataRow); } catch {} } } if(eqTable.DefaultView.Sort.Length == 0) { eqTable.DefaultView.Sort = "magn DESC"; } messageLabel.Text = "" + src.Count + " earthquakes"; }