public SiteInfoResponseType GetSitesInBox( float west, float south, float east, float north, Boolean IncludeSeries ) { Stopwatch timer = System.Diagnostics.Stopwatch.StartNew(); box queryBox = new box(west, south, east, north); queryLog2.LogStart(CustomLogging.Methods.GetSitesInBoxObject, queryBox.ToString(), appContext.Request.UserHostName); SiteInfoResponseType resp = new SiteInfoResponseType(); resp.site = WebServiceUtils.GetSitesByBox(queryBox, IncludeSeries); //set query info resp.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetSitesInBox"); NoteType note = CuahsiBuilder.createNote("box"); resp.queryInfo.note = CuahsiBuilder.addNote(null, note); queryLog2.LogEnd(CustomLogging.Methods.GetSitesInBoxObject, queryBox.ToString(), timer.ElapsedMilliseconds.ToString(), resp.site.Length.ToString(), appContext.Request.UserHostName); return(resp); }
public SiteInfoResponseType GetSites(string[] locationParameters, Boolean includeSeries) { locationParameters = WSUtils.removeEmptyStrings(locationParameters); List <locationParam> siteCodes = new List <locationParam>(locationParameters.Length); foreach (String s in locationParameters) { locationParam lp = new locationParam(s); siteCodes.Add(lp); } SiteInfoType[] sites = ODSiteInfo.GetSitesByLocationParameters(siteCodes.ToArray()); SiteInfoResponseType result = CreateSitesResponse(sites, includeSeries); if (locationParameters.Length == 0) { result.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetSites"); NoteType note = CuahsiBuilder.createNote("ALL Sites(empty request)"); result.queryInfo.note = CuahsiBuilder.addNote(null, note); } else { result.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetSites", locationParameters, null, null, null, null); } return(result); }
/// <summary> /// createSiteInfoResponse populates a SiteInfoResponseType. /// It is used the webmethod getSiteInfo. /// designed for multiple site codes /// This method will be slow if the information has never been cached. /// </summary> /// <param name="sites"></param> /// <param name="includeSeries"></param> private SiteInfoResponseType CreateSitesResponse(IEnumerable <SiteInfoType> sites, Boolean includeSeries) { /* for each site code, add a siteInfo type with a period of record * // for each site * createSitInfoType * add to response * createPeriodOfRecord * add to response * return response * */ SiteInfoResponseType response; response = CuahsiBuilder.CreateASetOfSiteResponses(1, 1); List <SiteInfoResponseTypeSite> sitesList = new List <SiteInfoResponseTypeSite>(); foreach (SiteInfoType site in sites) { sitesList.Add(GetSiteInfoOD.CreateSite(site, includeSeries)); } if (sitesList.Count > 0) { response.site = sitesList.ToArray(); } else { throw new WaterOneFlowException("No Sites found in specified region: "); } return(response); }
/// <summary> /// createSiteInfoResponse populates a SiteInfoResponseType. /// It is used the webmethod getSiteInfo. /// designed for multiple site codes /// This method will be slow if the information has never been cached. /// </summary> /// <param name="LocationParams"></param> private SiteInfoResponseType CreateSitesResponse(locationParam[] LocationParams) { /* for each site code, add a siteInfo type with a period of record * // for each site * createSitInfoType * add to response * createPeriodOfRecord * add to response * return response * */ SiteInfoResponseType response; SiteInfoType[] sites = ODSiteInfo.GetSitesByLocationParameters(LocationParams); if (sites.Length == 0) { throw new WaterOneFlowException("No Sites found"); } response = CuahsiBuilder.CreateASetOfSiteResponses(sites.Length, 1); for (int i = 0; i < sites.Length; i++) { response.site[i].siteInfo = sites[i]; String aSiteID = response.site[i].siteInfo.siteCode[0].siteID; // no period of record } return(response); }
public SiteInfoResponseType GetSites(string[] locationIDs) { Stopwatch timer = System.Diagnostics.Stopwatch.StartNew(); queryLog2.LogStart(CustomLogging.Methods.GetSites, locationIDs.ToString(), appContext.Request.UserHostName); SiteInfoResponseType result = new SiteInfoResponseType(); result.site = WebServiceUtils.GetSitesFromDb(); //set query info result.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetSites"); NoteType note = CuahsiBuilder.createNote("ALL Sites(empty request)"); result.queryInfo.note = CuahsiBuilder.addNote(null, note); queryLog2.LogEnd(CustomLogging.Methods.GetSites, locationIDs.ToString(), timer.ElapsedMilliseconds.ToString(), result.site.Length.ToString(), appContext.Request.UserHostName); return(result); }
private static seriesCatalogType createSeriesCatalog( seriesCatalogDataSet ds, VariablesDataset vds) { if (ds.SeriesCatalog.Count > 0) { Boolean useOD; String siteServiceURL; String siteServiceName; try { useOD = Boolean.Parse(ConfigurationManager.AppSettings["UseODForValues"]); if (!useOD) { siteServiceURL = ConfigurationManager.AppSettings["externalGetValuesService"]; siteServiceName = ConfigurationManager.AppSettings["externalGetValuesName"]; } else { siteServiceURL = "http://localhost/"; siteServiceName = "OD Web Services"; } } catch { useOD = true; // should be caught earlier siteServiceURL = "http://locahost/"; siteServiceName = "Fix UseODForValues, externalGetValuesService, externalGetValuesName"; } seriesCatalogType catalog = CuahsiBuilder.CreateSeriesCatalog( ds.SeriesCatalog.Count, siteServiceName, // menu name (aka OD name siteServiceURL // web service location ); List <seriesCatalogTypeSeries> seriesRecords = new List <seriesCatalogTypeSeries>(); foreach (seriesCatalogDataSet.SeriesCatalogRow row in ds.SeriesCatalog.Rows) { seriesCatalogTypeSeries aRecord = row2SeriesCatalogElement( row, ds, vds); seriesRecords.Add(aRecord); } catalog.series = seriesRecords.ToArray(); return(catalog); } else { seriesCatalogType catalog = CuahsiBuilder.CreateSeriesCatalog(0, null, // menu name (aka OD name String.Empty // web service location ); return(catalog); } }
private SiteInfoResponseType createSiteInfoResponse(locationParam[] LocationParameters) { /* for each site code, add a siteInfo type with a period of record * for each site * createSitInfoType * add to response * createPeriodOfRecord * add to response * return response * */ SiteInfoResponseType response = CuahsiBuilder.CreateASetOfSiteResponses(LocationParameters.Length, 1); for (int i = 0; i < LocationParameters.Length; i++) { if (LocationParameters[i] == null) { continue; } response.site[i].siteInfo = getSiteInfoType(LocationParameters[i]); if (response.site[i].siteInfo != null) { String aSiteID = null; Nullable <int> siteIDint = null; try { aSiteID = response.site[i].siteInfo.siteCode[0].siteID; } catch (NullReferenceException e) { String error = " no site code returned for sitecode" + LocationParameters[i]; log.Warn(error); response.site[i].seriesCatalog = CreateSeriesCatalogRecord(LocationParameters[i], null); } try { siteIDint = Convert.ToInt32(aSiteID); response.site[i].seriesCatalog = CreateSeriesCatalogRecord(LocationParameters[i], siteIDint); } catch (InvalidCastException e) { String error = " siteID was not an integer" + LocationParameters[i]; log.Warn(error); response.site[i].seriesCatalog = CreateSeriesCatalogRecord(LocationParameters[i], null); } } else { String error = " no site code returned for sitecode" + LocationParameters[i]; log.Warn(error); } } return(response); }
public override object GetTimeSeries( locationParam lp, VariableParam vp, Nullable <W3CDateTime> startDate, Nullable <W3CDateTime> endDate) { if (lp.isGeometry) { throw new WaterOneFlowException("Geometry not supported "); } TimeSeriesResponseType result = null; string[] StationsList = new string[] { lp.SiteCode }; result = CuahsiBuilder.CreateTimeSeriesObject(); result.queryInfo.criteria.locationParam = lp.ToString(); result.queryInfo.criteria.variableParam = vp.ToString(); result.timeSeries.sourceInfo = DataInfoService.GetSite(lp); // not fully correct, but just choose the first one. VariableInfoType[] vits = DataInfoService.GetVariableInfoObject(vp); result.timeSeries.variable = vits[0]; string aURL = InstantaneousData(startDate, endDate, new string[] { vp.Code }, StationsList, USGSCommon.option2AgencyCode(lp)); try { result.timeSeries.values = CreateWQTimeSeriesObject(vp, aURL); } catch (WaterOneFlowException e) { throw; } catch (WaterOneFlowSourceException e) { throw; } catch (Exception e) { log.Error(e.Message + e.StackTrace); throw new WaterOneFlowException("An External resource failed.", e); } List <NoteType> notes = new List <NoteType>(); NoteType urlNote = new NoteType(); urlNote.title = "USGS URL"; urlNote.Value = aURL; notes.Add(urlNote); result.queryInfo.note = notes.ToArray(); return(result); }
public SiteInfoResponseType GetSiteInfoResponse(locationParam[] LocationParameters, Boolean IncludeSeries) { SiteInfoResponseType result = createSiteInfoResponse(LocationParameters, IncludeSeries); string[] lps = Array.ConvertAll <locationParam, string>(LocationParameters, Convert.ToString); //result.queryInfo = CreateQueryInfo(lps); result.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetSiteInfo", lps, null, null, null, null); return(result); }
public SiteInfoResponseType GetSiteInfo(string locationParameter) { string siteId = locationParameter.Substring(locationParameter.LastIndexOf(":") + 1); SiteInfoResponseType resp = new SiteInfoResponseType(); resp.site = new SiteInfoResponseTypeSite[1]; resp.site[0] = new SiteInfoResponseTypeSite(); resp.site[0] = WebServiceUtils.GetSiteFromDb(siteId, true); resp.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetSiteInfo", new string[] { locationParameter }, null, null, null, null); return(resp); }
private static void AddQueryInfo(string StartDate, string EndDate, string Variable, string SiteNumber, TimeSeriesResponseType response) { response.queryInfo = new QueryInfoType(); response.queryInfo.criteria = new QueryInfoTypeCriteria(); response.queryInfo.creationTime = DateTime.UtcNow; response.queryInfo.creationTimeSpecified = true; response.queryInfo.criteria.locationParam = SiteNumber; response.queryInfo.criteria.variableParam = Variable; response.queryInfo.criteria.timeParam = CuahsiBuilder.createQueryInfoTimeCriteria(StartDate, EndDate); NoteType sourceNote = CuahsiBuilder.createNote("OD Web Service"); response.queryInfo.note = CuahsiBuilder.addNote(response.queryInfo.note, sourceNote); }
public TimeSeriesResponseType GetValuesForSiteVariable(string SiteNumber, string StartDate, string EndDate) { TimeSeriesResponseType response = new TimeSeriesResponseType(); response.timeSeries = new List <TimeSeriesType>( GetTimesSeriesTypeForSiteVariable(SiteNumber, StartDate, EndDate)).ToArray(); response.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetValuesForASite", new string[] { SiteNumber }, null, null, StartDate, EndDate); CuahsiBuilder.addNote(response.queryInfo.note, CuahsiBuilder.createNote("AllValuesForASite")); return(response); }
public SiteInfoResponseType GetSitesByBox(box queryBox, Boolean includeSeries) { IEnumerable <SiteInfoType> sites = ODSiteInfo.GetSitesByBox(queryBox); SiteInfoResponseType result = CreateSitesResponse(sites, includeSeries); // result.queryInfo = CreateQueryInfo(new string[] { queryBox.ToString() }); result.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetSitesByBox"); CuahsiBuilder.AddQueryInfoParameter(result.queryInfo, "north", queryBox.North.ToString()); CuahsiBuilder.AddQueryInfoParameter(result.queryInfo, "south", queryBox.South.ToString()); CuahsiBuilder.AddQueryInfoParameter(result.queryInfo, "east", queryBox.East.ToString()); CuahsiBuilder.AddQueryInfoParameter(result.queryInfo, "west", queryBox.West.ToString()); CuahsiBuilder.AddQueryInfoParameter(result.queryInfo, "includeSeries", includeSeries.ToString()); return(result); }
public TimeSeriesResponseType getValues(string SiteNumber, string Variable, string StartDate, string EndDate) { // convert dates // get site info // get site ID // return value dataset TimeSeriesResponseType response; W3CDateTime? BeginDateTime; W3CDateTime? EndDateTime; int?variableId = null; int?siteID; VariableInfoType varInfoType = null; SiteInfoType siteType = null; BeginDateTime = GetBeginDateTime(StartDate); EndDateTime = GetEndDateTime(EndDate); VariableParam vp = GetVariableParameter(Variable, ref variableId, ref varInfoType); locationParam sq = GetLocationParameter(SiteNumber); siteInfoDataSet sitDs = ODSiteInfo.GetSiteInfoDataSet(sq); response = CuahsiBuilder.CreateTimeSeriesObjectSingleValue(1); if (sitDs != null && sitDs.sites.Count > 0) { siteID = sitDs.sites[0].SiteID; ValuesDataSet valuesDs = getValuesDataset(siteID, variableId, BeginDateTime, EndDateTime); response.timeSeries[0].values = getValues(valuesDs, vp, variableId); // above is the values, add the site, and variables response.timeSeries[0].variable = varInfoType; response.timeSeries[0].sourceInfo = ODSiteInfo.row2SiteInfoElement(sitDs.sites[0], sitDs); } // AddQueryInfo(StartDate, EndDate, Variable, SiteNumber, response); response.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetValues", new string[] { SiteNumber }, null, new string[] { Variable }, StartDate, EndDate); return(response); }
public VariablesResponseType GetVariableInfo(string Variable) { VariableInfoType[] variableList; if (String.IsNullOrEmpty(Variable)) { variableList = ODvariables.getVariables(new VariableParam[0], Variables); } else { VariableParam vp; vp = new VariableParam(Variable); variableList = ODvariables.getVariable(vp, Variables); } if (variableList == null) { throw new WaterOneFlowException("Variable Not Found"); } VariablesResponseType Response = new VariablesResponseType(); Response.variables = variableList; if (Response.queryInfo == null) { Response.queryInfo = new QueryInfoType(); Response.queryInfo.criteria = new QueryInfoTypeCriteria(); } Response.queryInfo.creationTime = DateTime.UtcNow; Response.queryInfo.creationTimeSpecified = true; if (String.IsNullOrEmpty(Variable)) { Response.queryInfo.criteria.variableParam = "NULL (Request for all variables"; } else { Response.queryInfo.criteria.variableParam = Variable; } NoteType sourceNote = CuahsiBuilder.createNote("OD Web Service"); Response.queryInfo.note = CuahsiBuilder.addNote(Response.queryInfo.note, sourceNote); return(Response); }
public static TimeSeriesResponseType getValues(ValuesDataSet ValuesDs, VariableParam variable) { TimeSeriesResponseType response = CuahsiBuilder.CreateTimeSeriesObjectSingleValue(); // get siteInfo // get variable Info // get Values // reformats values dataset into a TimeSeriesResponseType List <ValueSingleVariable> valueList = ODValues.dataset2ValuesList(ValuesDs, variable); response.timeSeries.values.value = valueList.ToArray(); response.timeSeries.values.count = valueList.Count.ToString(); // add qualifiers List <qualifier> qualifers = ODValues.datasetQualifiers(ValuesDs); if (qualifers != null && qualifers.Count > 0) { response.timeSeries.values.qualifier = qualifers.ToArray(); } // add methods List <MethodType> methods = ODValues.datasetMethods(ValuesDs); if (methods != null && methods.Count > 0) { response.timeSeries.values.method = methods.ToArray(); } List <SourceType> sources = ODValues.datasetSources(ValuesDs); if (sources != null && sources.Count > 0) { response.timeSeries.values.source = sources.ToArray(); } List <OffsetType> offsets = ODValues.datasetOffsetTypes(ValuesDs); if (offsets != null && offsets.Count > 0) { response.timeSeries.values.offset = offsets.ToArray(); } return(response); }
public static units getUnitsElement(string unitsID, unitsDataset ds) { DataRow[] dr = ds.Tables["units"].Select("unitID = " + unitsID); if (dr.Length > 0) { unitsDataset.UnitsRow row = (unitsDataset.UnitsRow)dr[0]; string uID = row.UnitsID.ToString(); string unitType = String.IsNullOrEmpty(row.UnitsType) ? null : row.UnitsType; string unitAbbrev = String.IsNullOrEmpty(row.UnitsAbbreviation) ? null : row.UnitsAbbreviation; string unitName = String.IsNullOrEmpty(row.UnitsName) ? null : row.UnitsName; units u = CuahsiBuilder.CreateUnitsElement(null, uID, unitAbbrev, unitName); return(u); } else { return(null); } }
public VariablesResponseType GetVariableInfo(string Variable) { VariableInfoType[] variableList; if (String.IsNullOrEmpty(Variable)) { variableList = ODvariables.getVariables(new VariableParam[0], Variables); } else { VariableParam vp; vp = new VariableParam(Variable); variableList = ODvariables.getVariable(vp, Variables); } if (variableList == null) { throw new WaterOneFlowException("Variable Not Found"); } VariablesResponseType Response = new VariablesResponseType(); Response.variables = variableList; Response.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetVariableInfo", null, null, new string[] { Variable }, null, null); if (String.IsNullOrEmpty(Variable)) { CuahsiBuilder.addNote(Response.queryInfo.note, CuahsiBuilder.createNote("(Request for all variables")); } else { Response.queryInfo.criteria.variableParam = Variable; } NoteType sourceNote = CuahsiBuilder.createNote("OD Web Service"); Response.queryInfo.note = CuahsiBuilder.addNote(Response.queryInfo.note, sourceNote); return(Response); }
public static UnitsType getUnitsElement(int unitsID, VariablesDataset ds) { DataRow[] dr = ds.Tables["units"].Select("unitsID = " + unitsID); if (dr.Length > 0) { VariablesDataset.UnitsRow row = (VariablesDataset.UnitsRow)dr[0]; string uID = row.UnitsID.ToString(); string unitType = row.UnitsType; string unitAbbrev = row.UnitsAbbreviation; string unitName = row.UnitsName; UnitsType u = CuahsiBuilder.CreateUnitsElement(unitType, uID, unitAbbrev, unitName); return(u); } else { return(null); } }
/// <summary> /// GetVariableInfo /// </summary> /// <param name="VariableParameter">full variable code in format vocabulary:VariableCode</param> /// <returns>the VariableInfo object</returns> public VariablesResponseType GetVariableInfo(String VariableParameter) { Stopwatch timer = System.Diagnostics.Stopwatch.StartNew(); queryLog2.LogStart(CustomLogging.Methods.GetVariables, VariableParameter, appContext.Request.UserHostName); VariablesResponseType resp; if (string.IsNullOrEmpty(VariableParameter)) { resp = new VariablesResponseType(); resp.variables = WebServiceUtils.GetVariablesFromDb(); //setup query info resp.queryInfo = CuahsiBuilder.CreateQueryInfoType ("GetVariableInfo", null, null, new string[] { string.Empty }, null, null); CuahsiBuilder.addNote(resp.queryInfo.note, CuahsiBuilder.createNote("(Request for all variables")); } else { resp = new VariablesResponseType(); resp.variables = new VariableInfoType[1]; resp.variables[0] = WebServiceUtils.GetVariableInfoFromDb(VariableParameter); //setup query info resp.queryInfo = CuahsiBuilder.CreateQueryInfoType ("GetVariableInfo", null, null, new string[] { VariableParameter }, null, null); } queryLog2.LogEnd(CustomLogging.Methods.GetVariables, VariableParameter, timer.ElapsedMilliseconds.ToString(), resp.variables.Length.ToString(), appContext.Request.UserHostName); return(resp); }
private SiteInfoResponseType createSiteInfoResponse(locationParam[] LocationParameters, Boolean IncludeSeries) { // WSUtils.removeEmptyStrings(LocationParameters); /* for each site code, add a siteInfo type with a period of record * // for each site * createSitInfoType * add to response * createPeriodOfRecord * add to response * return response * */ SiteInfoResponseType response = CuahsiBuilder.CreateASetOfSiteResponses(LocationParameters.Length, 1); List <locationParam> lpList = new List <locationParam>(LocationParameters); foreach (locationParam lp in lpList) { if (lp == null) { lpList.Remove(lp); } } List <SiteInfoResponseTypeSite> sitesList = new List <SiteInfoResponseTypeSite>(lpList.Count); foreach (SiteInfoType sit in getSiteInfoType(lpList)) { SiteInfoResponseTypeSite site = CreateSite(sit, IncludeSeries); if (site != null) { sitesList.Add(site); } } response.site = sitesList.ToArray(); return(response); }
public SiteInfoResponseType GetSiteInfoResponse(locationParam locationParameter) { string Network; string SiteCode; SiteInfoResponseType result = createSiteInfoResponse(new locationParam[] { locationParameter }, true); // put a no result check here //result.queryInfo.criteria.locationParam = locationParameter.ToString(); // to string returns orignal string result.queryInfo = CuahsiBuilder.CreateQueryInfoType("GetSiteInfo", new string[] { locationParameter.ToString() }, null, null, null, null); if (result.site[0].siteInfo != null) { result.site[0].siteInfo.siteCode[0].network = System.Configuration.ConfigurationManager.AppSettings["network"]; } else { // we only have one site... so throw the exception // result.queryInfo.note = CuahsiBuilder.addNote(result.queryInfo.note,CuahsiBuilder.createNote("Site not found")); throw new WaterOneFlowException("Site '" + locationParameter.ToString() + "' Not Found"); } return(result); }
/// <summary> /// Method to generate a list of offset (from OD OffsetTypes table) in a ValuesDataSet /// This is done as a separate method since Values can could contain other VariableValue Types /// /// </summary> /// <param name="ds">ValuesDataSet with the values used in the timeSeries</param> /// <returns></returns> public static List <OffsetType> datasetOffsetTypes(ValuesDataSet ds) { /* generate a list * create a distinct DataSet * - new data view * - set filter (no nulls) * - use toTable with unique to get unique list * foreach to generate qualifiers * */ string COLUMN = "OffsetTypeID"; string TABLENAME = "offsetTypes"; List <OffsetType> list = new List <OffsetType>(); try { DataView view = new DataView(ds.DataValues); view.RowFilter = COLUMN + " is not Null"; DataTable ids = view.ToTable(TABLENAME, true, new string[] { COLUMN }); foreach (DataRow r in ids.Rows) { try { Object aId = r[COLUMN]; // edit here ValuesDataSet.OffsetTypesRow offset = ds.OffsetTypes.FindByOffsetTypeID((int)aId); if (offset != null) { OffsetType t = new OffsetType(); t.offsetTypeID = offset.OffsetTypeID; t.offsetTypeIDSpecified = true; if (!String.IsNullOrEmpty(offset.OffsetDescription)) { t.offsetDescription = offset.OffsetDescription; } ValuesDataSet.UnitsRow offUnit = ds.Units.FindByUnitsID(offset.OffsetUnitsID); string offUnitsCode; string offUnitsName = null; string offUnitsAbbreviation = null; if (!String.IsNullOrEmpty(offUnit.UnitsAbbreviation)) { offUnitsAbbreviation = offUnit.UnitsAbbreviation; } if (!String.IsNullOrEmpty(offUnit.UnitsName)) { offUnitsName = offUnit.UnitsName; } if (offUnit != null) { t.units = CuahsiBuilder.CreateUnitsElement( null, offUnit.UnitsID.ToString(), offUnitsAbbreviation, offUnitsName); } list.Add(t); } } catch (Exception e) { log.Error("Error generating a qualifier " + r.ToString() + e.Message); } } return(list); } catch (Exception e) { log.Error("Error generating a qualifiers " + e.Message); // non fatal exceptions return(null); } }
public static seriesCatalogTypeSeries row2SeriesCatalogElement(seriesCatalogDataSet.SeriesCatalogRow row, seriesCatalogDataSet ds, VariablesDataset vds, ControlledVocabularyDataset vocabularyDataset) { int variableID = row.VariableID; VariableInfoType variable = ODvariables.GetVariableByID(variableID, vds); Nullable <W3CDateTime> beginDateTime = null; if (!row.IsBeginDateTimeNull()) { TimeSpan timeSpan = row.BeginDateTime.Subtract(row.BeginDateTimeUTC); beginDateTime = new W3CDateTime(row.BeginDateTime, timeSpan); } Nullable <W3CDateTime> endDateTime = null; if (!row.IsEndDateTimeNull()) { TimeSpan timeSpan = row.EndDateTime.Subtract(row.EndDateTimeUTC); endDateTime = new W3CDateTime(row.EndDateTime, timeSpan); } Nullable <int> valueCount = null; if (!row.IsValueCountNull()) { valueCount = row.ValueCount; } string qualityControlLevelTerm = null; int? QualityControlLevelid = null; if (!row.IsQualityControlLevelIDNull()) { QualityControlLevelid = row.QualityControlLevelID; ControlledVocabularyDataset.QualityControlLevelsRow qcRow = vocabularyDataset.QualityControlLevels.FindByQualityControlLevelID(QualityControlLevelid.Value); if (qcRow != null) { qualityControlLevelTerm = qcRow.Definition; } } int?MethodID = null; if (!row.IsMethodIDNull()) { MethodID = row.MethodID; } int?SourceID = null; if (!row.IsSourceIDNull()) { SourceID = row.SourceID; } Nullable <Boolean> valueCountIsEstimated = false; /* public static seriesCatalogTypeSeries createSeriesCatalogRecord( * VariableInfoType variable, * string sampleMedium, * Nullable<W3CDateTime> beginDateTime, * Nullable<W3CDateTime> endDateTime, * Nullable<int> valueCount, * Nullable<Boolean> valueCountIsEstimated, * string dataType, * string valueType, * string generalCategory * ) */ seriesCatalogTypeSeries record = CuahsiBuilder.CreateSeriesRecord( variable, variable.sampleMedium.ToString(), beginDateTime, endDateTime, valueCount, valueCountIsEstimated, null, null, null, false, // real time null, // string if real time row.QualityControlLevelCode, QualityControlLevelid, row.MethodDescription, MethodID, row.Organization, row.SourceDescription, SourceID, row.Citation, true, // include UTC Time qualityControlLevelTerm ); return(record); }
public override object GetTimeSeries( locationParam lp, VariableParam vp, Nullable <W3CDateTime> startDate, Nullable <W3CDateTime> endDate) { if (lp.isGeometry) { throw new WaterOneFlowException("Geometry not supported "); } TimeSeriesResponseType result = null; //string Network; //string SiteCode; ////WSUtils.ParseSiteId(siteId, out Network, out SiteCode); //try //{ // locationParam sq = new locationParam(siteNumber); // Network = sq.Network; // SiteCode = sq.SiteCode; // if (sq.isGeometry) // { // throw new WaterOneFlowException("Location by Geometry not accepted: " + siteNumber); // } //} //catch (WaterOneFlowException we) //{ // log.Info("Bad SiteID:" + siteNumber); // throw; //} //catch (Exception e) //{ // log.Error("Uncaught exception:" + e.Message); // throw new WaterOneFlowException("Sorry. Your submitted site ID for this getSiteInfo request caused an problem that we failed to catch programmatically: " + e.Message); //} //// string WaterQualityList = "¶meter_cd=" + variable; //string[] StationsList = new string[] { SiteCode }; string[] StationsList = new string[] { lp.SiteCode }; //VariableParam vp; //try //{ // vp = new VariableParam(variable); //} //catch (WaterOneFlowException we) //{ // log.Info("Bad Variable Request '" + variable + "'"); // throw; //} //catch (Exception e) //{ // log.Error("uncaught exception duing Variable Request '" + variable + "'"); // throw new WaterOneFlowException("Sorry. Your variable parameter caused an exception that we failed to catch:" + e.Message); //} result = CuahsiBuilder.CreateTimeSeriesObject(); //// all data are provisional //List<note> notes = new List<note>(); //note urlNote = new note(); //urlNote.title = "USGS Data Provisional"; //urlNote.href = "http://waterdata.usgs.gov/nwis/help/?provisional"; //urlNote.Value = "All data are provisional, and subject to revision"; //notes.Add(urlNote); //result.queryInfo.note = notes.ToArray(); result.queryInfo.criteria.locationParam = lp.ToString(); result.queryInfo.criteria.variableParam = vp.ToString(); // result.queryInfo.criteria.timeParam = CuahsiBuilder.createQueryInfoTimeCriteria(startDate, endDate); // look for siteInfoType in cache, and use if it is there /* SiteInfoType sit = (SiteInfoType)appCache[sitCache + SiteCode]; * if (sit == null) * { * // just use the values for now. * ((SiteInfoType)result.timeSeries.sourceInfo).siteCode[0].Value = SiteCode; * ((SiteInfoType)result.timeSeries.sourceInfo).siteCode[0].network = "NWIS"; * * } * else * { * // in the cache, use it * result.timeSeries.sourceInfo = sit; * } * */ result.timeSeries.sourceInfo = DataInfoService.GetSite(lp); // vaiable info // result.timeSeries.variable = vp.getVariableSchemaType(); //result.timeSeries.variable = NwisVariableCatalog.getVariable(vp.Code, variableDataSet); //result.timeSeries.variable = ODvariables.getVariable(vp.Code, variableDataSet)[0]; // not fully correct, but just choose the first one. VariableInfoType[] vits = DataInfoService.GetVariableInfoObject(vp); result.timeSeries.variable = vits[0]; string aURL = GroundWater(startDate, endDate, StationsList, USGSCommon.option2AgencyCode(lp)); try { // refactor too much abstraction //CreateRealTimeSeriesObject(result, RealTime(StationsList)); result.timeSeries.values = CreateGWTimeSeriesObject(vp, aURL); } catch (WaterOneFlowException e) { //log.Error(e.Message + e.StackTrace); throw; } catch (WaterOneFlowSourceException e) { //log.Error(e.Message + e.StackTrace); throw; } catch (WebException e) { log.Error(e.Message + e.StackTrace); throw new WaterOneFlowException("Connecting to External resource failed.", e); } catch (Exception e) { log.Error(e.Message + e.StackTrace); throw new WaterOneFlowException("An External resource failed.", e); } result.timeSeries.sourceInfo = DataInfoService.GetSite(lp); List <NoteType> notes = new List <NoteType>(); NoteType urlNote = new NoteType(); urlNote.title = "USGS URL"; urlNote.Value = aURL; notes.Add(urlNote); result.queryInfo.note = notes.ToArray(); return(result); }
public override object GetTimeSeries( locationParam lp, variableParamVersion vp, W3CDateTime?startDate, W3CDateTime?endDate) { if ((endDate.HasValue && startDate.HasValue) && endDate.Value.DateTime < startDate.Value.DateTime) { throw new WaterOneFlowException("No Data. End Date must be greater than Start Date"); } TimeSeriesResponseType result = null; result = CuahsiBuilder.CreateTimeSeriesObject(); string[] StationsList = new string[] { lp.SiteCode }; SiteInfoType sit = null; try { sit = DataInfoService.GetSite(lp); result.timeSeries.sourceInfo = sit; } catch (WaterOneFlowException ex) { log.Info("EPA Bad Site Request" + vp.ToString()); throw ex; } catch (WaterOneFlowServerException ex) { log.Error("EPA server issued with Site Request" + vp.ToString()); throw ex; } catch (WaterOneFlowSourceException ex) { log.Error("EPA source issued with Site Request" + vp.ToString()); throw ex; } catch (Exception ex) { log.Error("EPA source issued with Site Request" + vp.ToString()); throw new WaterOneFlowServerException("Uncaught Exception in EPA Time series site reuqest", ex); } result.queryInfo.criteria.locationParam = lp.ToString(); result.queryInfo.criteria.variableParam = vp.ToString(); // not fully correct, but just choose the first one. VariableInfoType[] vits = null; try { vits = DataInfoService.GetVariableInfoObject(vp); result.timeSeries.variable = vits[0]; } catch (WaterOneFlowException ex) { log.Info("EPA Bad variable Request" + vp.ToString()); throw ex; } catch (WaterOneFlowServerException ex) { log.Error("EPA server issued with variable Request" + vp.ToString()); throw ex; } catch (WaterOneFlowSourceException ex) { log.Error("EPA source issued with variable Request" + vp.ToString()); throw ex; } catch (Exception ex) { log.Error("EPA source issued with variable Request" + vp.ToString()); throw new WaterOneFlowServerException("Uncaught Exception in EPA Time series site reuqest", ex); } String variableName = result.timeSeries.variable.variableName; string agency = GetAgencyEpaSiteCode(lp); string siteCode = GetSiteIDEpaSiteCode(lp); EPAResults.StoretResultFlatDataTable table = WqxResultsToDataset.GetStationResults( agency, siteCode, variableName, startDate, endDate); if (table.Rows.Count == 0) { // no retults, just go back result.timeSeries.values = new TsValuesSingleVariableType(); result.timeSeries.values.count = "0"; return(result); } DataRowCollection unitNameRows = EPAResponseUnits(table); // for now if (unitNameRows.Count > 1) { //throw new WaterOneFlowSourceException( // " EPA Returned more than one unit for request." // + " This is not supported at the present time" ); // no longer want an error. return data log.Info("EPA STATION WITH MORE THAN ONE UNIT: '" + lp.ToString()); } /* Logic neded for multiple units * select one with max count or latest one? * if max get count for each unit * For the selected unit, * * create a subtable, * * populate values * * Future: * for each unit * *collect a subtable, populate values * */ /* need to creat a units element * The units returned, are not necessarily the ones in the series catalog */ //string unitName = unitNameRows[0].ItemArray[0].ToString().Trim(); //result.timeSeries.variable.units = CuahsiBuilder.CreateUnitsElement(null, null, unitName, unitName); foreach (DataRow row in unitNameRows) { string unitName = row.ItemArray[0].ToString().Trim(); result.timeSeries.variable.units = CuahsiBuilder.CreateUnitsElement(null, null, unitName, unitName); StringBuilder select = new StringBuilder(); select.AppendFormat("[VariableUnitsAbbreviation]='{0}'", WaterOneFlowImpl.WSUtils.SqlEncode(unitName)); if (startDate.HasValue) { select.AppendFormat(" AND [localDateTime] > '{0}' ", startDate.Value.DateTime.ToString("s")); } if (endDate.HasValue) { select.AppendFormat(" AND [localDateTime] < '{0}' ", endDate.Value.DateTime.AddDays(1).ToString("s")); } EPAResults.StoretResultFlatRow[] rowsWithUnit = (EPAResults.StoretResultFlatRow[])table.Select(select.ToString()); result.timeSeries.values = DataValuesBuilder.CreateValuesElement(rowsWithUnit); result.timeSeries.values.unitsAbbreviation = unitName; // abbreviated name is presently returned } /* for now, just adding the methods, without the reference to the * value they came from. That will take a bit of work. * need to generate unique methodID's for distinct methods * then populate the methodID in the table, * then send to the value generator * */ /***** This can cause more method, if nore than one parameter is returned * eg pH presently returns phosphorous * */ DataRowCollection methodNameRows = EPAResponseMethods(table); if (methodNameRows != null && methodNameRows.Count > 0) { List <MethodType> methods; if (result.timeSeries.values.method == null) { methods = new List <MethodType>(); } else { methods = new List <MethodType>(result.timeSeries.values.method); } foreach (DataRow row in methodNameRows) { MethodType method = new MethodType(); method.MethodDescription = row.ItemArray[0].ToString(); methods.Add(method); } result.timeSeries.values.method = methods.ToArray(); } return(result); }
private VariableInfoType RowToVariable(UsgsDbDailyValues.VariablesRow vRow) { VariableInfoType vit; String vCode = vRow.IsVariableCodeNull() ? null : vRow.VariableCode; String vName = vRow.IsVariableNameNull() ? null : vRow.VariableName; //String vDescr = String uName = vRow.IsUnitsNull() ? null : vRow.Units; String uAbbrev = vRow.IsUnitAbbreviationNull() ? null : vRow.UnitAbbreviation; String uType = vRow.IsUnitTypeNull() ? null : vRow.UnitType; String uCode = null; // ID is code if (!vRow.IsVariableUnitsIDNull()) { uCode = vRow.VariableUnitsID.ToString(); } UnitsTypeEnum uTypeEnum = (UnitsTypeEnum)CoreBuilder.GetTextAsEnum(uType, typeof(UnitsTypeEnum)); units vUnit = CuahsiBuilder.CreateUnitsElement( uTypeEnum, uCode, uAbbrev, uName); /* this needs to be fixed to accept value type and data type * and time options */ vit = CuahsiBuilder.CreateVariableInfoType( null, // don't want variable ID exposed in the NWIS service "NWIS", vRow.VariableCode, vRow.VariableName, null, vUnit // units ); CoreBuilder.SetEnumFromText(vit, vRow, "valueType", typeof(valueTypeEnum)); CoreBuilder.SetEnumFromText(vit, vRow, "dataType", typeof(dataTypeEnum)); // add usgs statistic code options if (!vRow.Isstat_cdNull()) { List <option> opts = new List <option>(1); option opt = new option(); opt.name = "statistic"; opt.optionCode = vRow.stat_cd; opts.Add(opt); vit.options = opts.ToArray(); } if (!vRow.IsisRegularNull() && vRow.isRegular) { vit.timeSupport = new VariableInfoTypeTimeSupport(); vit.timeSupport.isRegular = vRow.isRegular; vit.timeSupport.isRegularSpecified = true; // add time support // check to be sure we've got some vaild stuff if (!vRow.IsTimeSupportNull()) { int timeInterval; if (Int32.TryParse(vRow.TimeSupport, out timeInterval)) { vit.timeSupport.timeInterval = timeInterval; vit.timeSupport.timeIntervalSpecified = true; } } if (!vRow.IsTimeUnitsIDNull()) { vit.timeSupport.unit = new UnitsType(); vit.timeSupport.unit.UnitID = 104; vit.timeSupport.unit.UnitIDSpecified = true; vit.timeSupport.unit.UnitDescription = "day"; vit.timeSupport.unit.UnitAbbreviation = "d"; vit.timeSupport.unit.UnitType = (UnitsTypeEnum)CoreBuilder.GetTextAsEnum("Time", typeof(UnitsTypeEnum));; } } return(vit); }
/* * public TimeSeriesResponseType GetValues( * locationParam Location, * VariableParam Variable, * W3CDateTime? BeginDateTime, W3CDateTime? EndDateTime) */ public override WaterOneFlow.Service.Response.v1_1.TimeSeriesResponseType GetTimeSeries( locationParam lp, VariableParam vp, Nullable <W3CDateTime> startDate, Nullable <W3CDateTime> endDate) { // put the date check up front. // a start date can be older than 31 days, as long as the endDate is not older than 31 days. if (endDate.HasValue && endDate.Value.DateTime < DateTime.Today.AddDays(-31)) { throw new WaterOneFlowException("No Data. EndDate must be less than that 31 days from present."); } TimeSeriesResponseType result = null; string[] StationsList = new string[] { lp.SiteCode }; result = CuahsiBuilder.CreateTimeSeriesObject(); result.queryInfo.criteria.locationParam = lp.ToString(); result.queryInfo.criteria.variableParam = vp.ToString(); // not fully correct, but just choose the first one. VariableInfoType[] vits = DataInfoService.GetVariableInfoObject(vp); result.timeSeries.variable = vits[0]; string aUrl = UnitValues(startDate, endDate, new string[] { vp.Code }, StationsList); try { // refactor too much abstraction //CreateRealTimeSeriesObject(result, RealTime(StationsList)); result.timeSeries.values = new TsValuesSingleVariableType[1]; result.timeSeries.values[0] = USGSCommon.CreateTimeSeriesValuesElement(vp, aUrl, true // add provisional flag ); } catch (Exception e) { log.Error(e.Message + e.StackTrace); throw new WaterOneFlowException("An External resource failed.", e); } // all data are provisional List <NoteType> notes = new List <NoteType>(); NoteType pNote = new NoteType(); pNote.title = "USGS Data Provisional"; pNote.href = "http://waterdata.usgs.gov/nwis/help/?provisional"; pNote.Value = "All data are provisional, and subject to revision"; notes.Add(pNote); NoteType urlNote = new NoteType(); urlNote.title = "USGS URL"; urlNote.Value = aUrl; notes.Add(urlNote); result.queryInfo.note = notes.ToArray(); return(new WaterOneFlow.Service.v1_1.xsd.TimeSeriesResponse(result)); }
public static SiteInfoType row2SiteInfoElement(siteInfoDataSet.sitesRow row, siteInfoDataSet ds) { SiteInfoType sit = CuahsiBuilder.CreateASiteInfoTypeWithLatLongPoint(); sit.siteName = !String.IsNullOrEmpty(row.SiteName) ? row.SiteName : null; // sit created with a single siteCode sit.siteCode[0].siteID = row.SiteID.ToString(); sit.siteCode[0].Value = !String.IsNullOrEmpty(row.SiteCode) ? row.SiteCode : null; string siteNetwork = System.Configuration.ConfigurationManager.AppSettings["network"]; sit.siteCode[0].network = siteNetwork; // we have a point ((LatLonPointType)sit.geoLocation.geogLocation).latitude = row.Latitude; ((LatLonPointType)sit.geoLocation.geogLocation).longitude = row.Longitude; if (row.LatLongDatumID == 0) { ((LatLonPointType)sit.geoLocation.geogLocation).srs = ConfigurationManager.AppSettings["defaultSpatialReferenceSystemSRS"]; } else { siteInfoDataSet.SpatialReferencesRow[] datum = (siteInfoDataSet.SpatialReferencesRow[])ds.SpatialReferences.Select("SpatialReferenceID = " + row.LatLongDatumID); if (datum.Length > 0 && !datum[0].IsSRSIDNull()) { ((LatLonPointType)sit.geoLocation.geogLocation).srs = ConfigurationManager.AppSettings["SRSPrefix"] + datum[0].SRSID; } } if (!row.IsElevation_mNull()) { sit.elevation_m = row.Elevation_m; sit.elevation_mSpecified = true; if (!row.IsVerticalDatumNull()) { sit.verticalDatum = row.VerticalDatum; } } if (!row.IsLocalXNull() && !row.IsLocalYNull() && !row.IsLocalProjectionIDNull()) { sit.geoLocation.localSiteXY = new SiteInfoTypeGeoLocationLocalSiteXY[1]; SiteInfoTypeGeoLocationLocalSiteXY xy = new SiteInfoTypeGeoLocationLocalSiteXY(); xy.X = row.LocalX; xy.Y = row.LocalY; //@TODO local XY siteInfoDataSet.SpatialReferencesRow[] datum = (siteInfoDataSet.SpatialReferencesRow[])ds.SpatialReferences.Select("SpatialReferenceID = " + row.LocalProjectionID); if (datum.Length > 0) { if (!String.IsNullOrEmpty(datum[0].SRSName)) { xy.projectionInformation = datum[0].SRSName; } else { xy.projectionInformation = ConfigurationManager.AppSettings["SRSPrefix"] + datum[0].SRSID; } } sit.geoLocation.localSiteXY[0] = xy; } if (!row.IsCountyNull()) { NoteType aNote = CuahsiBuilder.createNote(row.County, "County", null); sit.note = CuahsiBuilder.addNote(sit.note, aNote); } if (!row.IsStateNull()) { NoteType aNote = CuahsiBuilder.createNote(row.State, "State", null); sit.note = CuahsiBuilder.addNote(sit.note, aNote); } if (!row.IsCommentsNull()) { NoteType aNote = CuahsiBuilder.createNote(row.Comments, "Site Comments", null); sit.note = CuahsiBuilder.addNote(sit.note, aNote); } return(sit); }
/// <summary> /// Builds a VariableInfoType from a dataset row /// the dataSet is stored in the NWISService variableDataSet. /// Find the rwo you want with the command: /// /// and convert. /// </summary> /// <param name="row"></param> /// <returns></returns> public static VariableInfoType rowToVariableInfoType(VariablesDataset.VariablesRow row, VariablesDataset ds) { UnitsType aUnit = null; aUnit = getUnitsElement(row.VariableUnitsID, ds); String vCode = row.VariableCode; int vid = row.VariableID; String vocab = System.Configuration.ConfigurationManager.AppSettings["vocabulary"]; String varName = row.VariableName; VariableInfoType vt = CuahsiBuilder.CreateVariableInfoType( vid, vocab, vCode, varName, null, //variable description aUnit ); // add time support vt.timeScale = new VariableInfoTypeTimeScale(); vt.timeScale.isRegular = row.IsRegular; vt.timeScale.timeSupport = Convert.ToInt32(row.TimeSupport); vt.timeScale.timeSupportSpecified = true; // future, when ODM reports spacing //if (row.["timeSpacing"] != null) //{ // vt.timeScale.timeSpacing = Convert.ToInt32(row["timeSpacing"]); // vt.timeScale.timeSpacingSpecified = true; //} UnitsType tUnit = getUnitsElement(row.TimeUnitsID, ds); if (tUnit != null) { vt.timeScale.unit = tUnit; } vt.valueType = String.IsNullOrEmpty(row.ValueType) ? null : row.ValueType; vt.sampleMedium = String.IsNullOrEmpty(row.SampleMedium) ? null : row.SampleMedium; vt.dataType = String.IsNullOrEmpty(row.DataType) ? null : row.DataType; if (vt.dataType.Equals("Categorical", StringComparison.InvariantCultureIgnoreCase)) { IEnumerable <VariableInfoTypeCategory> categories = getCategoryElement(vid, ds); vt.categories = new List <VariableInfoTypeCategory>(categories).ToArray(); } vt.generalCategory = String.IsNullOrEmpty(row.GeneralCategory) ? null : row.GeneralCategory; // zero is default value for datatype... so don't add it if it is the default value if (!row.NoDataValue.Equals(0)) { vt.noDataValue = row.NoDataValue; vt.noDataValueSpecified = true; } vt.speciation = String.IsNullOrEmpty(row.Speciation) ? null : row.Speciation; return(vt); }