/// <summary> /// Check input series Begin and End dates against input Start and End dates. /// Series dates within input Start and End Dates - return true, return false otherwise /// </summary> public static bool IsSeriesInDateRange(HISWebClient.BusinessObjects.Models.SeriesDataCartModel.SeriesDataCart series, DateTime startDate, DateTime endDate) { if ((startDate <= series.BeginDate) && (endDate >= series.EndDate)) { //Series dates within input date range - return true... return true; } return false; }
/// <summary> /// Adds series to an existing feature set /// </summary> /// <param name="series">Series</param> /// <param name="fs">Feature set</param> private static void AddToFeatureSet(HISWebClient.BusinessObjects.Models.SeriesDataCartModel.SeriesDataCart series, IFeatureSet fs) { double lat = series.Latitude; double lon = series.Longitude; var coord = new Coordinate(lon, lat); var f = new Feature(FeatureType.Point, new[] {coord}); fs.Features.Add(f); var row = f.DataRow; PopulateDataRow(series, row); }
private static void PopulateDataRow(HISWebClient.BusinessObjects.Models.SeriesDataCartModel.SeriesDataCart series, DataRow row) { row["DataSource"] = series.ServCode; row["SiteName"] = series.SiteName; row["VarName"] = series.VariableName; row["SiteCode"] = series.SiteCode; row["VarCode"] = series.VariableCode; row["Keyword"] = series.ConceptKeyword; row["ValueCount"] = series.ValueCount; row["StartDate"] = series.BeginDate.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); row["EndDate"] = series.EndDate.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); row["ServiceURL"] = series.ServURL; row["ServiceCode"] = series.ServCode; row["DataType"] = series.DataType; row["ValueType"] = series.ValueType; row["SampleMed"] = series.SampleMedium; row["TimeUnits"] = series.TimeUnit; row["TimeSupport"] = series.TimeSupport; row["Latitude"] = series.Latitude; row["Longitude"] = series.Longitude; row["IsRegular"] = series.IsRegular; row["Units"] = series.VariableUnits; }
/// <summary> /// Updates BeginDate/EndDate/ValueCount in the SeriesDataCart to the user-specified range /// </summary> /// <param name="series">Series to update</param> /// <param name="startDate">User-specified startDate</param> /// <param name="endDate">User-specified endDate</param> public static void UpdateDataCartToDateInterval(HISWebClient.BusinessObjects.Models.SeriesDataCartModel.SeriesDataCart series, DateTime beginDate, DateTime endDate) { //Initialize/validate input parameters... if ((null == series) || (0 >= series.ValueCount) || //No values in series (! series.IsRegular) || //Data is instantaneous - cannot calculate collection interval (null == series.BeginDate) || (null == series.EndDate) || (series.EndDate <= series.BeginDate) || //Series End date earlier than Begin date (null == beginDate) || (null == endDate) || (endDate <= beginDate) || //Search End date earlier than Begin date (series.BeginDate > endDate) || //Series begins after search ends (series.EndDate < beginDate)) //Series ends before search begins { //Input parameter(s) invalid - return early... series.ValueCount = 0; //No value count estimate made return; } //Determine the search begin and end dates... var searchBeginDate = (series.BeginDate < beginDate) ? beginDate : series.BeginDate; var searchEndDate = (series.EndDate > endDate) ? endDate : series.EndDate; //Calculate total and search time spans TimeSpan tsTotal = series.EndDate - series.BeginDate; TimeSpan tsSearch = searchEndDate - searchBeginDate; //Calculate estimated value count: Total value count * (search time span / total time span) //NOTE: The use of MidpointRouding.AwayFromZero ensures values like 4.5 round to 5 (not 4) // See MicroSoft documentation on Math.Round(Double) and Math.Round(Double, MidpointRounding) for more information int vcTotal = series.ValueCount; series.ValueCount = Convert.ToInt32( Math.Round(vcTotal * (tsSearch.TotalMilliseconds / tsTotal.TotalMilliseconds), MidpointRounding.AwayFromZero)); //Set series begin and and dates for search... series.BeginDate = searchBeginDate; series.EndDate = searchEndDate; }