Module: Usgs::Site

Includes:
Utils
Included in:
Client
Defined in:
lib/usgs/site.rb

Instance Method Summary collapse

Methods included from Utils

#format_date, #format_datetime, #resolve_parameter_codes

Instance Method Details

#get_sites(state_cd: nil, county_cd: nil, huc: nil, b_box: nil, site_name: nil, site_type: nil, site_status: "all", parameter_cd: nil) ⇒ Array<Usgs::Models::Site>

Fetch USGS monitoring locations (sites)

Examples:

Usgs.client.get_sites(state_cd: "CO", parameter_cd: :discharge)

Parameters:

  • state_cd (String) (defaults to: nil)

    Two-letter state code (e.g., “CO”)

  • county_cd (String) (defaults to: nil)

    FIPS county code (e.g., “08013”)

  • huc (String) (defaults to: nil)

    2-16 digit Hydrologic Unit Code

  • bBox (String)

    “west,south,east,north” in decimal degrees

  • site_name (String) (defaults to: nil)

    Text search in station name

  • site_type (String) (defaults to: nil)

    e.g., “ST” (stream), “GW”, “LK”, “WE”

  • site_status (String) (defaults to: "all")

    “active”, “inactive”, “all” (default: “all”)

  • parameter_cd (String, Symbol, Array) (defaults to: nil)

    e.g. :discharge, “00060”, or [:discharge, :gage_height]

Returns:

Raises:

  • (ArgumentError)

    if no major filter is provided



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/usgs/site.rb', line 24

def get_sites(state_cd: nil, county_cd: nil, huc: nil, b_box: nil, site_name: nil,
              site_type: nil, site_status: "all", parameter_cd: nil)
  query = {
    format: "rdb,1.0",
    stateCd: state_cd,
    countyCd: county_cd,
    huc: huc,
    bBox: b_box,
    siteName: site_name,
    siteType: site_type,
    siteStatus: site_status
  }.compact

  if parameter_cd
    resolved = resolve_parameter_codes(parameter_cd)
    query[:parameterCd] = resolved if resolved && !resolved.empty?
  end

  # Validate for at least one major filter
  major_keys = %i[stateCd countyCd huc bBox].map(&:to_sym)
  raise ArgumentError, "You must provide at least one major filter: state_cd, county_cd, huc or b_box" if (query.keys & major_keys).empty?

  raw = api_get("/site/", query)
  Parser.parse_sites(raw.body).map { |row| Models::Site.new(row) }
end