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
9 days 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.
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.