OGC EDR Extractor
Pricing
from $0.35 / 1,000 record extracteds
OGC EDR Extractor
Point at ANY OGC API - EDR (Environmental Data Retrieval) service — Met Office, FMI, pygeoapi. List collections, then query environmental data by position, area, radius, trajectory, or cube. Flattens CoverageJSON / GeoJSON to rows (parameter, value, unit, lon/lat, time). Pay per record.
Pricing
from $0.35 / 1,000 record extracteds
Rating
0.0
(0)
Developer
Datamule
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
A generic "point at any OGC API - EDR service" scraper. OGC API - EDR (Environmental Data Retrieval) is the OGC-blessed JSON standard for querying environmental data by geometry — ask a server for the value(s) at a position, within an area / radius / cube, along a trajectory / corridor, or at named locations, over a time window, for a set of parameters. It is spoken by the UK Met Office, national meteorological services (e.g. the Finnish Meteorological Institute, ECMWF feeds), and the pygeoapi / ldproxy server families.
Give this actor an EDR service root, discover its collections, then run a query —
and it flattens the CoverageJSON or GeoJSON response into clean, flat
dataset rows (parameter, value, unit, longitude/latitude, time) plus a lossless
raw.
One actor, every OGC API - EDR service — no per-instance scraper needed. It is the EDR sibling of the companion OGC API Features Extractor and STAC Catalog Extractor.
What it does
- Discover collections — leave the collection id empty (or turn on List
collections only) and it reads
{baseUrl}/collectionsand returns one row per EDR collection: id, title, description, the supported query types, parameter names, spatial + temporal + vertical extent, and CRS. Read this first to pick a real collection id and a query type it supports. - Query environmental data — set a collection id + a query type
(position / area / radius / trajectory / corridor / cube / locations) + the
query geometry (coords as WKT, or a bounding box for cube) + an optional
date/time window and parameter filter, and it runs the EDR query and
flattens the response:
- CoverageJSON (the EDR-native format) — a
Coverageor aCoverageCollection. The domain axes (x / y / z / t) are crossed against every parameter's data array to emit one row per (position × time × parameter) observation, each with its value + unit. - GeoJSON —
locations/areaqueries often return a FeatureCollection; one row per feature with geometry, lon/lat and properties.
- CoverageJSON (the EDR-native format) — a
- Normalized + raw — stable columns (
parameter,value,unit,longitude,latitude,z,time) while the untouched response object is preserved inraw, so nothing is lost even though every service and collection exposes different parameters.
Example inputs
Discover what a service exposes (start here — no auth):
{ "baseUrl": "https://demo.pygeoapi.io/master", "listCollectionsOnly": true }
A position query — the full sea-surface-temperature time series at a point in the North Atlantic (pygeoapi ICOADS, no auth):
{ "baseUrl": "https://demo.pygeoapi.io/master", "collectionId": "icoads-sst", "queryType": "position", "coords": "POINT(-30 40)", "parameterNames": ["SST"] }
A cube query — a gridded box + time window:
{ "baseUrl": "https://demo.pygeoapi.io/master", "collectionId": "icoads-sst", "queryType": "cube", "bbox": [-35, 38, -25, 44], "parameterNames": ["SST"], "maxRecords": 200 }
A locations query on the UK Met Office EDR labs service (returns GeoJSON):
{ "baseUrl": "https://labs.metoffice.gov.uk/edr", "collectionId": "copernicus_dem", "queryType": "locations" }
Discover the 47 collections (incl. ECMWF) on the Finnish Meteorological Institute:
{ "baseUrl": "https://opendata.fmi.fi/edr", "listCollectionsOnly": true }
Input reference
baseUrl(required) — the EDR service root (not/collections).collectionId— the collection to query; empty ⇒ discovery mode.listCollectionsOnly— force discovery mode (list collections, query nothing).queryType—position/area/radius/trajectory/corridor/cube/locations/items(only the types a collection advertises are valid — the actor validates and tells you what's supported).coords— the query geometry as WKT in WGS84 lon/lat (POINT(...),POLYGON((...)),LINESTRING(...)).bbox—[west, south, east, north]for the cube query.datetime— RFC 3339 instant or range; open ranges with...parameterNames— the parameter(s) to retrieve; empty ⇒ all.z— vertical level for collections with a vertical dimension.locationId— a specific named location for alocationsquery.within/withinUnits— radius distance + units for aradiusquery.maxRecords— total record cap (default 1000).queryParams— arbitrary extra query params passthrough.bearerToken/extraHeaders— optional auth for key-gated services.
Authentication
None required for the public services (pygeoapi, Met Office labs, FMI). For key-gated services supply a Bearer token and/or Extra request headers — both optional, never required, and the token is never logged.
Output
One dataset item per record:
- Discovery mode (
_mode: "collection") —collectionId,title,queryTypes,parameterNames,spatialExtent,temporalExtent,crs, … - Query mode — one observation per (position × time × parameter) for
CoverageJSON (
_mode: "observation":parameter,value,unit,longitude,latitude,z,time,domainType), or one feature per GeoJSON feature (_mode: "feature":geometryType,featureId,properties, lon/lat). raw— the complete, untouched source object.
A query that returns no data (HTTP 204 / empty) returns 0 records, not an
error. Pointed at a non-EDR host (a /collections with no data_queries) it
fails fast with a clear message.
Pricing
Pay per record — you're charged one record event per row returned (one per
collection in discovery mode, one per observation/feature in query mode). A query
that returns nothing costs nothing.
Your max run charge is respected. The Actor writes only the records your run's maximum charge covers, billing each one as it is written, and stops before a record you have not paid for. If the budget does not cover even one record, no request is sent to the EDR service and nothing is billed.
Notes
- Speaks OGC API - EDR: handles the
data_queriesdiscovery block, CoverageJSON (Coverage+CoverageCollection, both explicit-valuesand compact{start, stop, num}axes, row-major NdArray decode) and GeoJSON responses. - Not affiliated with or endorsed by the OGC or any target service. Respect each provider's terms and any per-dataset licensing.