{
  "items": [
    {
      "type": "Feature",
      "id": "040g",
      "geometry": null,
      "properties": {
        "uid": "urn:x-odas:procedure:pdm-mems-audio-capture",
        "featureType": "http://www.w3.org/ns/sosa/Procedure",
        "name": "PDM MEMS Microphone Audio Capture",
        "description": "Pulse Density Modulation (PDM) microphone sampling procedure. Each MEMS microphone produces a 1-bit PDM bitstream. The XMOS xCORE decimation filter converts PDM to PCM at 16000 Hz. Frame size: 256 samples, hop size: 128 samples. USB Audio Class 1.0 transport to host."
      }
    },
    {
      "type": "Feature",
      "id": "0410",
      "geometry": null,
      "properties": {
        "uid": "urn:x-odas:procedure:srp-phat-beamforming",
        "featureType": "http://www.w3.org/ns/sosa/Procedure",
        "name": "SRP-PHAT Steered Response Power Beamforming",
        "description": "Sound Source Localization via Steered Response Power with Phase Transform. For each audio frame: (1) Compute generalized cross-correlation (GCC-PHAT) for all microphone pairs. (2) Scan a virtual hemisphere of candidate directions at configurable angular resolution. (3) For each candidate direction, sum the cross-correlation values for all mic pairs at the expected time delay. (4) The direction with highest accumulated energy is the DOA estimate. Outputs up to 4 potential sources per frame as unit-sphere vectors (x,y,z) with energy E. Input: multi-channel PCM audio. Output: SSL pots {x, y, z, E}[0..3]."
      }
    },
    {
      "type": "Feature",
      "id": "041g",
      "geometry": null,
      "properties": {
        "uid": "urn:x-odas:procedure:particle-filter-tracking",
        "featureType": "http://www.w3.org/ns/sosa/Procedure",
        "name": "Particle Filter Sound Source Tracking",
        "description": "Sound Source Tracking via sequential Monte Carlo (particle filtering). Steps: (1) Prediction via excitation-damping model with three motion states (stationary 10%, constant velocity 40%, acceleration 50%). (2) Instantaneous probability computed by comparing energy to threshold E_T. (3) Observation assignation via Bayesian hypothesis testing (H1: false detection, H2: new source, H3: existing source). (4) Instantiation: initialize H=500 particles from Gaussian distribution when P(new) > T_new for F_new consecutive frames. (5) Removal: destroy filter when P(false) < T_remove for F_remove frames. (6) Weight update using observation likelihood. (7) Resampling when effective particle count drops below threshold. Output: tracked sources with persistent ID, tag, direction (x,y,z), activity level."
      }
    },
    {
      "type": "Feature",
      "id": "0420",
      "geometry": null,
      "properties": {
        "uid": "urn:x-odas:procedure:ray-to-ray-triangulation",
        "featureType": "http://www.w3.org/ns/sosa/Procedure",
        "name": "Multi-Array Ray-to-Ray 3D Triangulation",
        "description": "3D source position estimation from distributed microphone array DOAs (IROS 2017, Lauzon et al.). For K arrays at known positions L_k with DOA unit vectors q_k: (1) For each pair of arrays (a,b), compute the nearest point Z_ab on the two skew DOA lines using the Ray-to-Ray shortest distance algorithm (Schneider and Eberly 2002). (2) Average all K(K-1)/2 pair intersection points to get estimated position. (3) Use this as initialization mean for the particle filter. (4) Particle filter refines position estimate over time with excitation-damping motion model. Requires NTP synchronization between arrays. Minimum 2 arrays; 3+ recommended for robust estimation."
      }
    },
    {
      "type": "Feature",
      "id": "042g",
      "geometry": null,
      "properties": {
        "uid": "urn:x-odas:procedure:odas-config-actuation",
        "featureType": "http://www.w3.org/ns/sosa/Procedure",
        "name": "ODAS Runtime Configuration Actuation",
        "description": "Procedure for modifying ODAS pipeline parameters at runtime. Validates parameter values against permitted ranges, applies changes to the active processing pipeline, and confirms the new state. Supports atomic parameter updates (single parameter) and batch updates (multiple parameters in one command). Controllable parameters include: energy threshold E_T, new-source probability threshold T_new, frames-to-confirm F_new, removal threshold T_remove, particle count H, microphone gain, and frame rate."
      }
    },
    {
      "type": "Feature",
      "id": "0430",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:odas:az-ma-1:calibration:v1",
        "featureType": "sosa:Procedure",
        "name": "Calibration Proc (AZ-MA-1)",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "043g",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:odas:az-ma-1:health-monitor:v1",
        "featureType": "sosa:Procedure",
        "name": "Health Proc (AZ-MA-1)",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "0440",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:odas:az-ma-1:processing-chain:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "ODAS Processing Chain (AZ-MA-1)",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "044g",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:odas:az-ma-1:frame-transform:v1",
        "featureType": "sosa:Procedure",
        "name": "Transform (AZ-MA-1)",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "045g",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:sgp4-propagation:v1",
        "name": "SGP4 Orbital Propagation",
        "description": "Two-Line Element (TLE) / OMM-based SGP4/SDP4 orbital propagation model. Consumes NORAD General Perturbations (GP) element sets and produces ECEF geodetic positions (lat, lon, alt) at arbitrary epochs."
      }
    },
    {
      "type": "Feature",
      "id": "046g",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:lob-wls-triangulation:v1",
        "name": "WLS LOB Triangulation v1",
        "description": "Weighted least-squares bearing-only geolocation. Consumes N≥2 lines of bearing from acoustic sensor nodes, computes optimal intersection point with inverse-variance weighting, and produces a location estimate with CEP50 uncertainty."
      }
    },
    {
      "type": "Feature",
      "id": "0470",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:orbit-track-generation:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "Orbit Track Generation v1",
        "description": "Generates a predicted ground-track product for one full orbital period (~100 minutes) by propagating SGP4 positions at 60-second intervals from the current epoch forward. Each track product is an array of {lat_deg, lon_deg, alt_km, timestamp} points. Product is regenerated every 5 minutes to incorporate any TLE updates. Reference implementation: python-sgp4 (Brandon Rhodes).",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "047g",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:senrep:sop:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "SENREP SOP v1",
        "description": "Reporting procedure used by the SET to transform reviewed sensor-derived activity into a formal sensor report (SENREP). Inputs: operator-reviewed fix, supporting LOBs, classification/context, contactId assignment. Outputs: SENREP observation, track SamplingFeature creation or update. Assumptions: (1) identity is committed at the reporting tier, (2) contactId is the authoritative join key.",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "0490",
      "geometry": null,
      "properties": {
        "uid": "urn:csapi-explorer:smoke-test:procedures:1773153504578",
        "featureType": "http://www.w3.org/ns/sosa/Procedure",
        "name": "[csapi-smoke-test-resource] Smoke Test procedures (updated)",
        "description": "Auto-generated by CRUD smoke test (update). Tag: csapi-smoke-test-resource"
      }
    },
    {
      "type": "Feature",
      "id": "049g",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:nws-surface-observation:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "NWS Surface Observation v1",
        "description": "Publishes real-time NWS surface observations derived from api.weather.gov station resources. Latest station observations are normalized to SI-oriented fields and published as flat JSON result objects. The underlying observing network is primarily ASOS/AWOS; nominal station reporting is hourly with special observations as conditions warrant, and API publication may lag upstream MADIS availability by up to about 20 minutes.",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "04a0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:ndbc-buoy-observation:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "NDBC Buoy Observation v1",
        "description": "Publishes real-time marine meteorological and oceanographic observations from NOAA's National Data Buoy Center (NDBC). Observations are sourced from NDBC realtime flat files, normalized into a flat JSON result object, and published to CSAPI. Realtime files generally represent the last 45 days of data that have undergone automated quality checks; most stations report hourly and much of the data is typically available by about 25 minutes after the hour.",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "04ag",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:ndbc:buoycam-imagery:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "NDBC BuoyCAM Imagery v1",
        "description": "Publishes cached BuoyCAM imagery from NOAA NDBC buoy-mounted cameras. The publisher periodically polls each station's latest-image endpoint, fetches the JPEG when a new image is detected (via SHA-256 hash comparison), caches the image to an immutable URL, and publishes an observation record referencing that cached URL. BuoyCAMs are daylight-only; image frequency varies but status updates typically occur every 30-60 minutes during daylight hours.",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "04b0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:coops-water-level:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "CO-OPS Coastal Observation v1",
        "description": "Publishes real-time water level observations, tide predictions, and coastal meteorological data from NOAA's Center for Operational Oceanographic Products and Services (CO-OPS). Data is sourced from the CO-OPS Data API, normalized into a flat JSON result object, and published to CSAPI. Water levels are 6-minute verified observations referenced to the MLLW datum in metric units.",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "04bg",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:metar-decoder:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "METAR Decoder v1",
        "description": "Publishes real-time METAR observations from the AviationWeather.gov REST API. Data includes temperature, dew point, wind speed/direction, visibility, barometric pressure, cloud layers, flight category, and the raw METAR string. Observations are decoded from standard METAR format and published to CSAPI."
      }
    },
    {
      "type": "Feature",
      "id": "04c0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:opensky-adsb-decoder:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "OpenSky ADS-B Decoder v1",
        "description": "Publishes real-time ADS-B aircraft state vectors from the OpenSky Network REST API. Data includes position, altitude, velocity, heading, vertical rate, transponder code, and on-ground status for all aircraft visible in a configured bounding box. Each observation represents one aircraft at one moment in time.",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "04cg",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:usgs-water-observation:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "USGS Water Observation v1",
        "description": "Publishes curated real-time USGS water monitoring observations from the USGS Water Data OGC API. The current station set uses one system per monitoring location and two datastreams per station: discharge (00060) and gage height (00065). Runtime fetches instantaneous values, normalizes them into flat JSON result objects, and publishes one observation per station and parameter per cycle.",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "04d0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:environment-agency-hydrology:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "Environment Agency Hydrology Observation v1",
        "description": "Fetches selected latest readings from the Environment Agency Hydrology API and publishes one CSAPI observation per selected station measure. The initial curated set covers river level, river flow, rainfall, and groundwater level while preserving Environment Agency measure identity, quality fields, units, and source URLs."
      }
    },
    {
      "type": "Feature",
      "id": "04dg",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:uk-air:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "UK-AIR Air Pollution Observation v1",
        "description": "Fetches selected recent readings from Defra UK-AIR's SOS / 52 North Timeseries REST API and publishes one CSAPI observation per selected pollutant timeseries. The initial curated set covers NO2, O3, PM10, and PM2.5 while preserving source timeseries identity, pollutant URIs, units, and source URLs."
      }
    },
    {
      "type": "Feature",
      "id": "04e0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:bgs-sensorthings:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "BGS SensorThings Telemetry Observation v1",
        "description": "Fetches selected latest observations from the British Geological Survey Sensor Data Service OGC SensorThings API and publishes one CSAPI observation per selected Thing/Datastream. The initial curated set covers UKGEOS Glasgow downhole hydro loggers with water temperature, conductivity, and pressure-derived water level telemetry."
      }
    },
    {
      "type": "Feature",
      "id": "04eg",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:met-office-datahub-land-observations:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "Met Office DataHub Land Observations v1",
        "description": "Fetches recent hourly observations from the Met Office Weather DataHub Land Observations API. The initial curated set uses the documented nearest location/geohash flow and publishes selected station weather parameters."
      }
    },
    {
      "type": "Feature",
      "id": "04f0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:met-office-datahub-global-spot-hourly:v1",
        "featureType": "sosa:ForecastingProcedure",
        "name": "Met Office DataHub Global Spot Hourly Forecast v1",
        "description": "Fetches deterministic hourly site-specific forecasts from the Met Office Weather DataHub Global Spot API. Published CSAPI observations represent forecast values with explicit issue time, valid time, lead time, location, parameter, unit, and source metadata. These resources are virtual forecast points, not physical deployed sensors."
      }
    },
    {
      "type": "Feature",
      "id": "04fg",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:usgs-nims-imagery:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "USGS NIMS Station Imagery v1",
        "description": "Publishes image-reference observations from the USGS National Imagery Management System (NIMS). The current publisher model reuses existing USGS water monitoring station systems and attaches one selected imagery datastream per curated camera as a Pattern A companion datastream. Runtime polls NIMS listFiles, derives image time, constructs stable S3-hosted URLs for multiple image resolutions, and publishes URLs and metadata instead of binary image payloads.",
        "validTime": [
          "2026-01-01T00:00:00Z",
          ".."
        ]
      }
    },
    {
      "type": "Feature",
      "id": "04g0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:usgs-eq-feed-normalizer:v1",
        "featureType": "sml:SimpleProcess",
        "name": "USGS Earthquake Feed Normalizer",
        "description": "Procedure describing how the OSHConnect-Python USGS earthquake publisher polls an official USGS GeoJSON summary feed, normalizes each feature into one CSAPI observation, and exposes a per-event detail link for richer drill-down. The baseline runtime uses the summary feed only; detail-feed and FDSN resources are documented as selective enrichment companions."
      }
    },
    {
      "type": "Feature",
      "id": "04gg",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:digitraffic-road-weather:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "Digitraffic Road Weather Observation v1",
        "description": "Fetches current road-weather readings from Fintraffic Digitraffic road weather station APIs and publishes one CSAPI observation per curated Finnish station. The observation result preserves source station ID, sensor IDs, names, units, measured times, and source URLs."
      }
    },
    {
      "type": "Feature",
      "id": "04hg",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:fmi-weather:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "FMI Weather Observation v1",
        "description": "Fetches recent FMI Open Data simple weather observations and publishes one combined observation per curated Finnish station."
      }
    },
    {
      "type": "Feature",
      "id": "04i0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:fmi-air-quality:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "FMI Air Quality Observation v1",
        "description": "Fetches recent FMI Open Data hourly simple air-quality observations and publishes one combined observation per curated Finnish monitoring location."
      }
    },
    {
      "type": "Feature",
      "id": "04ig",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:digitraffic-marine-ais:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "Digitraffic Marine AIS Decoder v1",
        "description": "Fetches the Fintraffic Digitraffic Marine AIS latest vessel-location feed, filters it to the configured Gulf of Finland demo window, enriches records with vessel metadata when available, and publishes one CSAPI observation per vessel state."
      }
    },
    {
      "type": "Feature",
      "id": "04j0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:digitraffic-rail-trains:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "Digitraffic Rail Live Train Decoder v1",
        "description": "Fetches Fintraffic Digitraffic Rail latest train locations, optionally enriches them with live-train metadata, filters to the configured Finland demo window, and publishes one CSAPI observation per current train position."
      }
    },
    {
      "type": "Feature",
      "id": "04jg",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:syke-hydrology:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "SYKE Hydrology Observation v1",
        "description": "Fetches selected latest water-level and discharge readings from the Finnish Environment Institute (SYKE) Hydrologiarajapinta OData API and publishes one CSAPI observation per selected station measure."
      }
    },
    {
      "type": "Feature",
      "id": "04k0",
      "geometry": null,
      "properties": {
        "uid": "urn:os4csapi:procedure:digitraffic-weathercam:v1",
        "featureType": "sosa:ObservingProcedure",
        "name": "Digitraffic Weather Camera Image v1",
        "description": "Polls selected Fintraffic Digitraffic road-weather camera preset metadata, derives direct JPEG and thumbnail URLs, and publishes image-reference observations on the companion Digitraffic road-weather station systems."
      }
    }
  ]
}