public async Task <IActionResult> Get([FromQuery] string regions = "", [FromQuery] string stationTypes = "", [FromQuery] string agencies = "", [FromQuery] string regressionTypes = "", [FromQuery] string variableTypes = "", [FromQuery] string statisticGroups = "", [FromQuery] string filterText = null, [FromQuery] int page = 1, [FromQuery] int pageCount = 50, [FromQuery] bool includeStats = false, [FromQuery] bool geojson = false) { try { List <string> regionList = parse(regions); List <string> stationTypeList = parse(stationTypes); List <string> agencyList = parse(agencies); List <string> regressionTypeList = parse(regressionTypes); List <string> variableTypeList = parse(variableTypes); List <string> statisticGroupList = parse(statisticGroups); IQueryable <Station> entities = agent.GetStations(regionList, stationTypeList, agencyList, regressionTypeList, variableTypeList, statisticGroupList, includeStats, filterText); // get number of items to skip for pagination var skip = (page - 1) * pageCount; sm("Returning page " + page + " of " + (entities.Count() / pageCount + 1) + "."); sm("Total Count: " + entities.Count()); entities = entities.Skip(skip).Take(pageCount); if (geojson) { return(Ok(GeojsonFormatter.ToGeojson(entities))); // return as geojson } return(Ok(entities)); } catch (Exception ex) { return(HandleException(ex)); } }
public async Task <IActionResult> WithinBounds([FromQuery] double xmin, [FromQuery] double ymin, [FromQuery] double xmax, [FromQuery] double ymax, [FromQuery] bool geojson = false, [FromQuery] bool includeStats = false, [FromQuery] int?page = null, [FromQuery] int pageCount = 50) { try { IEnumerable <Station> stations = agent.GetStationsWithinBounds(xmin, ymin, xmax, ymax, includeStats).AsEnumerable(); if (geojson) { return(Ok(GeojsonFormatter.ToGeojson(stations))); } // get number of items to skip for pagination // checking for page number to be sent for this so it doesn't cause issues in StreamStats for now if (page != null) { var skip = (Convert.ToInt32(page) - 1) * pageCount; sm("Returning page " + page + " of " + (stations.Count() / pageCount + 1) + "."); sm("Total Count: " + stations.Count()); stations = stations.Skip(skip).Take(pageCount); } return(Ok(stations)); } catch (Exception ex) { return(await HandleExceptionAsync(ex)); } }
public async Task <IActionResult> Nearest([FromQuery] double lat, [FromQuery] double lon, [FromQuery] double radius, [FromQuery] bool includeStats = false, [FromQuery] bool geojson = false, [FromQuery] int?page = null, [FromQuery] int pageCount = 50) { try { IQueryable <Station> stations = agent.GetNearest(lat, lon, radius, includeStats); if (stations.Count() == 0) { sm("No stations located within search distance.", MessageType.warning); } // get number of items to skip for pagination // checking for page number to be sent for this so it doesn't cause issues in StreamStats for now if (page != null) { var skip = (Convert.ToInt32(page) - 1) * pageCount; sm("Returning page " + page + " of " + (stations.Count() / pageCount + 1) + "."); sm("Total Count: " + stations.Count()); stations = stations.Skip(skip).Take(pageCount); } if (geojson) { return(Ok(GeojsonFormatter.ToGeojson(stations))); } return(Ok(stations)); } catch (Exception ex) { return(await HandleExceptionAsync(ex)); } }
public async Task <IActionResult> Network([FromQuery] double lat, [FromQuery] double lon, [FromQuery] double distance, [FromQuery] bool includeStats = false, [FromQuery] bool geojson = false, [FromQuery] int?page = null, [FromQuery] int pageCount = 50) { try { var nldi_sa = new NLDIServiceAgent(this.NLDIsettings, this.Navigationsettings); var isOk = await nldi_sa.ReadNLDIAsync(lat, lon, distance); if (!isOk) { throw new Exception("Failed to retrieve NLDI data"); } JObject nldi_stations = (JObject)nldi_sa.getStations(); var stationCodes = new List <string>(); if (nldi_stations["features"] != null) { var count = nldi_stations["features"].Count(); if (count == 0) { sm("No stations located within search distance.", MessageType.warning); } foreach (var feat in nldi_stations["features"].Children()) { var id = (string)feat["properties"]["identifier"]; string splitID = id.Split(new string[] { "-" }, StringSplitOptions.None)[1]; stationCodes.Add(splitID); } if (count > 0) { var stations = agent.GetStations(null, null, null, null, null, null, includeStats, null, stationCodes); // need to pull in geojson changes and use that if (geojson) { return(Ok(GeojsonFormatter.ToGeojson(stations))); } // get number of items to skip for pagination // checking for page number to be sent for this so it doesn't cause issues in StreamStats for now if (page != null) { var skip = (Convert.ToInt32(page) - 1) * pageCount; sm("Returning page " + page + " of " + (stations.Count() / pageCount + 1) + "."); sm("Total Count: " + stations.Count()); stations = stations.Skip(skip).Take(pageCount); } return(Ok(stations)); } } sm("No stations located within search distance.", MessageType.warning); return(Ok(nldi_stations)); } catch (Exception ex) { return(await HandleExceptionAsync(ex)); } }