/// <summary> /// Populate the variables available from the selected site /// layer, the polygon layer, and the selected polygons in /// the map within this layer. /// </summary> private void populateVariables() { polygonData.Clear(); foreach (IFeature polygon in polygons.Features) { PolygonData data = new PolygonData(); data.polygon = polygon; IMapPointLayer pointLayer = ((KeyValuePair <IMapPointLayer, string>)SiteList.SelectedItem).Key; var features = pointLayer.DataSet.Features; foreach (IFeature point in features) { if (point.Intersects(polygon)) { SiteData siteData = new SiteData(); siteData.site = point; foreach (var fld in point.ParentFeatureSet.GetColumns()) { var getColumnValue = (Func <string, string>)(column => (point.DataRow[column].ToString())); var strValue = getColumnValue(fld.ColumnName); switch (fld.ColumnName) { case "SiteCode": siteData.siteCode = strValue; break; case "VarCode": siteData.variableCode = strValue; break; case "VarName": siteData.variableName = strValue; break; } } data.sites.Add(siteData); variables.Add(siteData.variableName); } } polygonData.Add(data); } if (variables.Count > 0) { VariableList.DataSource = new BindingSource(variables, null); } }
/// <summary> /// This function gets the data values. /// </summary> private DataTable getAverageTable(PolygonData polygon) { var query = "SELECT DataValues.LocalDateTime, AVG(DataValues.DataValue) FROM DataValues" + " LEFT JOIN DataSeries ON DataValues.SeriesID == DataSeries.SeriesID" + " LEFT JOIN Variables ON DataSeries.VariableID == Variables.VariableID" + " WHERE DataValues.SeriesID IN ({0}) AND DataValues.DataValue != Variables.NoDataValue" + " GROUP BY DataValues.LocalDateTime"; var formatted = String.Format(query, String.Join(",", polygon.dataSeries.ToArray())); DataTable result = dbOperations.LoadTable(formatted); return(result); }
/// <summary> /// This function gets the serie's ids. /// </summary> private void getSeriesID(int siteID, int variableID, PolygonData polygon) { var query = "SELECT SeriesID FROM DataSeries WHERE SiteID = '" + siteID + "'" + "AND VariableID = '" + variableID + "'"; DataTable result = dbOperations.LoadTable(query); foreach (DataRow row in result.Rows) { polygon.dataSeries.Add(Convert.ToInt32(row.ItemArray.First())); } }
/// <summary> /// This function gets the time series (date - value) /// </summary> private Series getSeriesFromTable(PolygonData polygon) { DataTable averageTable = getAverageTable(polygon); Series series = new Series(); series.Site = getSitesParameters(polygon); var site = polygon.sites.Find(f => f.variableName == VariableList.SelectedValue.ToString()); series.Variable = getVariablesParameters(site.variableID); series.CreationDateTime = DateTime.Now; series.LastCheckedDateTime = DateTime.Now; series.UpdateDateTime = DateTime.Now; foreach (DataRow row in averageTable.Rows) { series.AddDataValue((DateTime)row["LocalDateTime"], (Double)row["AVG(DataValues.DataValue)"]); } return(series); }
/// <summary> /// This function gets the site information. /// </summary> private Site getSitesParameters(PolygonData polygon) { IFeature centroid = polygon.polygon.Centroid(); var newpoint = sitesPoints.AddFeature(centroid); Site site = new Site(); var xy = new[] { centroid.Coordinates.First().X, centroid.Coordinates.First().Y }; String projectionString = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[" + "\"WGS_1984\",6378137,298.257223562997]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.0174532925199433]]"; var _wgs84Projection = ProjectionInfo.FromEsriString(projectionString); Reproject.ReprojectPoints(xy, new double[] { 0, 0 }, App.Map.Projection, _wgs84Projection, 0, 1); int indexNumber = (polygonData.IndexOf(polygon) + 1); site.Code = "CrwrAggregation:" + OutputResultName.Text + indexNumber.ToString(); newpoint.DataRow.BeginEdit(); newpoint.DataRow["SiteCode"] = site.Code.ToString(); newpoint.DataRow.EndEdit(); site.Name = OutputResultName.Text + indexNumber.ToString(); site.Latitude = xy[1]; site.Longitude = xy[0]; //site.Elevation_m = 12; site.VerticalDatum = "Unkown"; //site.LocalX = 12; //site.LocalY = 12; //site.PosAccuracy_m = 12; site.State = ""; site.County = ""; //site.Comments = "testing"; //site.Country = "Mexico"; //site.SiteType = "Type"; return(site); }