/// <summary> /// Checks temporal resolution and runs appropriate aggregation function. /// </summary> /// <param name="errorMsg"></param> /// <param name="output"></param> /// <param name="input"></param> /// <returns></returns> private ITimeSeriesOutput TemporalAggregation(out string errorMsg, ITimeSeriesOutput output, ITimeSeriesInput input) { errorMsg = ""; output.Metadata.Add("gldas_temporalresolution", input.TemporalResolution); if (input.Units.Contains("imperial")) { output.Metadata["gldas_unit"] = "in"; } output.Data = (input.Units.Contains("imperial")) ? NLDAS.UnitConversion(out errorMsg, output, input) : output.Data; output.Metadata.Add("column_1", "Date"); switch (input.TemporalResolution) { case "daily": output.Data = NLDAS.DailyValues(out errorMsg, output, input); output.Metadata.Add("column_2", "Daily Average"); return(output); case "weekly": output.Data = NLDAS.WeeklyValues(out errorMsg, output, input); output.Metadata.Add("column_2", "Weekly Average"); return(output); case "monthly": output.Data = NLDAS.MonthlyValues(out errorMsg, output, input); output.Metadata.Add("column_2", "Monthly Average"); return(output); default: return(output); } }
/// <summary> /// Makes the GetData call to the base NLDAS class. /// </summary> /// <param name="errorMsg"></param> /// <param name="output"></param> /// <param name="input"></param> /// <returns></returns> public ITimeSeriesOutput GetData(out string errorMsg, SoilMoisture input) { errorMsg = ""; Data.Source.GLDAS gldas = new Data.Source.GLDAS(); ITimeSeriesOutput gldasOutput = input.Output; List <ITimeSeriesOutput> layersData = new List <ITimeSeriesOutput>(); List <string> urls = input.Input.BaseURL; for (int i = 0; i < input.Layers.Count; i++) { input.Input.BaseURL = new List <string>() { urls[i] }; ITimeSeriesOutputFactory oFactory = new TimeSeriesOutputFactory(); ITimeSeriesOutput tempOutput = new TimeSeriesOutput(); tempOutput = oFactory.Initialize(); string data = gldas.GetData(out errorMsg, input.Layers[i].Replace('-', '_') + "_Soil_Moisture", input.Input); if (errorMsg.Contains("ERROR")) { return(null); } tempOutput = gldas.SetDataToOutput(out errorMsg, "SoilMoisture", data, tempOutput, input.Input); if (errorMsg.Contains("ERROR")) { return(null); } tempOutput = TemporalAggregation(out errorMsg, tempOutput, input.Input); if (errorMsg.Contains("ERROR")) { return(null); } layersData.Add(tempOutput); } gldasOutput = NLDAS.MergeLayers(out errorMsg, layersData, "gldas"); if (errorMsg.Contains("ERROR")) { return(null); } return(gldasOutput); }
/// <summary> /// Check soil moisture data endpoints. /// </summary> /// <returns></returns> public Dictionary <string, string> CheckEndpointStatus() { if (this.Input.Source.Contains("nldas")) { return(NLDAS.CheckStatus(this.Input)); } else if (this.Input.Source.Contains("gldas")) { return(GLDAS.CheckStatus(this.Input)); } else { return(new Dictionary <string, string>() { { "status", "invalid source" } }); } }
// -------------- SoilMoisture Functions -------------- // /// <summary> /// Get SoilMoisture data function. /// </summary> /// <param name="errorMsg"></param> /// <returns></returns> public ITimeSeriesOutput GetData(out string errorMsg) { errorMsg = ""; // If the timezone information is not provided, the tz details are retrieved and set to the geometry.timezone varaible. if (this.Input.Geometry.Timezone.Offset == 0) { Utilities.Time tz = new Utilities.Time(); this.Input.Geometry.Timezone = tz.GetTimezone(out errorMsg, this.Input.Geometry.Point) as Timezone; if (errorMsg.Contains("ERROR")) { return(null); } } if (!CheckLayers(out errorMsg)) { return(null); } ITimeSeriesOutputFactory iFactory = new TimeSeriesOutputFactory(); this.Output = iFactory.Initialize(); switch (this.Input.Source) { case "nldas": // NLDAS SoilMoisture Data call NLDAS nldas = new NLDAS(); this.Output = nldas.GetData(out errorMsg, this); if (errorMsg.Contains("ERROR")) { return(null); } break; case "gldas": // GLDAS SoilMoisture Data call GLDAS gldas = new GLDAS(); this.Output = gldas.GetData(out errorMsg, this); if (errorMsg.Contains("ERROR")) { return(null); } break; default: errorMsg = "ERROR: 'Source' for SoilMoisture was not found among available sources or is invalid."; break; } ; // Adds Geometry metadata to the output metadata. NOT WORKING this.Output.Metadata.Concat(this.Input.Geometry.GeometryMetadata); // Adds Timezone info to metadata this.Output.Metadata.Add(this.Input.Source + "_timeZone", this.Input.Geometry.Timezone.Name); this.Output.Metadata.Add(this.Input.Source + "_tz_offset", this.Input.Geometry.Timezone.Offset.ToString()); //TODO: Add output format control return(this.Output); }