Module: Cdss::Telemetry
Overview
Provides methods for accessing telemetry station data from the CDSS API.
This module includes functionality for retrieving telemetry stations and their associated time series data.
Instance Method Summary collapse
-
#get_telemetry_stations(aoi: nil, radius: nil, abbrev: nil, county: nil, division: nil, gnis_id: nil, usgs_id: nil, water_district: nil, wdid: nil) ⇒ Array<Station>
Fetches telemetry stations based on various filtering criteria.
-
#get_telemetry_ts(abbrev:, parameter: "DISCHRG", start_date: nil, end_date: nil, timescale: "day", include_third_party: true) ⇒ Array<Reading>
Fetches telemetry time series data for specified stations.
Methods included from Utils
#batch_dates, #build_query, #fetch_paginated_data, #format_date, #format_query_param, #parse_timestamp, #safe_float, #safe_integer
Instance Method Details
#get_telemetry_stations(aoi: nil, radius: nil, abbrev: nil, county: nil, division: nil, gnis_id: nil, usgs_id: nil, water_district: nil, wdid: nil) ⇒ Array<Station>
Fetches telemetry stations based on various filtering criteria.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/cdss/telemetry.rb', line 29 def get_telemetry_stations(aoi: nil, radius: nil, abbrev: nil, county: nil, division: nil, gnis_id: nil, usgs_id: nil, water_district: nil, wdid: nil) query = { format: "json", dateFormat: "spaceSepToSeconds", includeThirdParty: true, abbrev: abbrev, county: county, division: division, gnisId: gnis_id, usgsStationId: usgs_id, waterDistrict: water_district, wdid: wdid } if aoi if aoi.is_a?(Hash) && aoi[:latitude] && aoi[:longitude] query.merge!(longitude: aoi[:longitude], latitude: aoi[:latitude]) elsif aoi.is_a?(Array) && aoi.count == 2 query.merge!(longitude: aoi[0], latitude: aoi[1]) else raise ArgumentError, "Invalid 'aoi' parameter" end query[:radius] = radius || 20 query[:units] = "miles" end fetch_paginated_data( endpoint: "/telemetrystations/telemetrystation/", query: query ) { |data| Parser.parse_stations(data) } end |
#get_telemetry_ts(abbrev:, parameter: "DISCHRG", start_date: nil, end_date: nil, timescale: "day", include_third_party: true) ⇒ Array<Reading>
Fetches telemetry time series data for specified stations.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/cdss/telemetry.rb', line 74 def get_telemetry_ts(abbrev:, parameter: "DISCHRG", start_date: nil, end_date: nil, timescale: "day", include_third_party: true) timescales = %w[day hour raw] unless timescales.include?(timescale) raise ArgumentError, "Invalid 'timescale' argument: '#{timescale}'. Valid values are: #{timescales.join(', ')}" end query = { format: "json", dateFormat: "spaceSepToSeconds", abbrev: abbrev, parameter: parameter, includeThirdParty: include_third_party.to_s } query[:startDate] = start_date&.strftime("%m-%d-%Y") if start_date query[:endDate] = end_date&.strftime("%m-%d-%Y") if end_date fetch_paginated_data( endpoint: "/telemetrystations/telemetrytimeseries#{timescale}/", query: query ) { |data| Parser.parse_readings(data, timescale: timescale.to_sym) } end |