DroneInfo

Canada

ECCC GeoMet Radar Composite

How Environment and Climate Change Canada's North American radar composite is read with a single WMS GetFeatureInfo query, and why a 0 mm/h reading cannot yet be told apart from no radar having looked at all.

At a glance

Product
RADAR_1KM_RRAI, 1 km North American rain-rate composite
Composite of
Canadian S-band DPQPE (Dual-Polarization Quantitative Precipitation Estimation) plus a NOAA-derived NEXRAD equivalent for the US, one grid
Cadence
New composite every 6 minutes
Coverage
Roughly 16-70N, 171-49W: North America plus Mexico and the Caribbean
Access
WMS GetFeatureInfo at geo.weather.gc.ca/geomet, no authentication, no API key
Decoder dependency
None: a single JSON response, no file and no native binary
Units
mm/h directly from the value property; snow rate is a separate layer (RADAR_1KM_RSNO, cm/h) not queried here
Licence
Open Government Licence - Canada
Required attribution
Contains information licensed under the Open Government Licence - Canada

How it signals an absence

Three different facts, and only one of them is a zero.

On the wire these three collapse onto one field. A measurement is radarStatus: "available"; no coverage is radarStatus: "out-of-coverage"; and no measurement, a failed or empty attempt, is radarStatus: "temporarily-unavailable". That field describes the outcome of the whole routing pass, not the one network this page is about: NowcastRouter walks the registered national adapters in order and returns as soon as one reports a measurement, so a point this adapter reports as out-of-coverage can still come back available if a different adapter further down the order answers instead, and can come back temporarily-unavailable rather than out-of-coverage if any other adapter in the pass failed instead of declining. radarCoverage sits beside it: "ok" appears only together with available, and "model-fallback", meaning Open-Meteo's model nowcast answered instead, can appear with either out-of-coverage or temporarily-unavailable.

SignalUpstream meaningWe reportWhy
empty FeatureCollectionNo feature at the queried pointout-of-coverageEither the coordinate failed the coverage gate before any request was made, or the WMS response itself carried no usable feature. Permanent for the point.
client-level error (timeout, 5xx, rate limit, malformed JSON)The request itself failedunavailableA radar may well cover the point; the request just did not succeed this time. Worth asking again shortly.
value: 0Measured zero, or nothing lookedmeasurementThe layer cannot tell these apart without also querying RADAR_COVERAGE_RRAI, which this adapter does not do. Reported as a measurement regardless - the one known place a zero here may not mean what it says.

What the product is

Environment and Climate Change Canada publishes RADAR_1KM_RRAIon its GeoMet WMS service: a pre-stitched rain-rate composite covering the whole of North America, built from Canadian S-band DPQPE (Dual-Polarization Quantitative Precipitation Estimation) for ECCC's own radars plus a NOAA-derived equivalent for US NEXRAD stations, all stitched onto one 1 km grid. A new composite lands every 6 minutes.

There is no file to download and no decoder to install. A single WMS GetFeatureInforequest against a tiny bounding box, about 0.01 degrees to each side of the point, for a box roughly 0.02 degrees on a side, asks for an 11-by-11 pixel window centred on the point and returns the centre pixel's value as JSON:

GetFeatureInfobash
curl -s "https://geo.weather.gc.ca/geomet?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&LAYERS=RADAR_1KM_RRAI&QUERY_LAYERS=RADAR_1KM_RRAI&CRS=EPSG:4326&BBOX=47.5515,-52.7226,47.5715,-52.7026&WIDTH=11&HEIGHT=11&I=5&J=5&INFO_FORMAT=application/json" \
  | jq '.features[0].properties.value'

WMS 1.3.0 with CRS=EPSG:4326 orders the bounding box as lat,lon, not lon,lat: the opposite of the convention GDAL uses elsewhere in this reference. Of the seven adapters covered here, this is one of four, alongside MET Norway, DWD and JMA, that never shell out to a decoder binary; the other three, MRMS, DMI and Met Office UK, all call out to GDAL. Of those four, this is the only one that reaches its composite through a single WMS query rather than a REST JSON endpoint or a downloaded file: MET Norway and DWD are plain JSON GETs, and JMA still has to fetch and decode a PNG tile before it has a number at all.

A North American composite, not a Canadian one

The layer is not Canada-only: it covers all of North America on one grid. Inside the API, EcccNowcastProvider is registered after MrmsNowcastProvider, so on a US point MRMS answers first wherever it has coverage. ECCC's own coverage gate is wider than MRMS's CONUS, Alaska, Hawaii, Puerto Rico and Guam extent, roughly 16-70N and 171-49W, which reaches the Canadian Arctic, Mexico and the Caribbean. Which of the two adapters names itself as the source for a given coordinate is a routing decision, made at request time, not a fact this page can state in advance - see the demo call below to check a specific point.

Two ways to decline, and one zero that means two things

A point outside the composite, or a feature with no numeric value on it, comes back as an empty FeatureCollection, which is permanent for that coordinate. A timeout, a 5xx, a rate limit or a malformed response is a different fact: the request itself failed, and asking again shortly is worth doing. Only a numeric value is a rate, and 0 is the one case worth stating plainly rather than glossing over.

RADAR_1KM_RRAIhas no dedicated "no coverage" value of its own: a cell reads 0whether the radar looked and measured nothing, or whether nothing was looking at that cell in the first place. Telling those apart would mean also querying ECCC's companion coverage layer, RADAR_COVERAGE_RRAI, which this adapter does not yet do. Until it does, a 0 from ECCC is reported as a measurement, the one place left in this pipeline where an unknown can still read as a confirmed zero.

Or call the API instead

The same reading, normalised, with the source that answered named in the response. No key and no signup for the demo endpoint.

curlbash
curl "https://api.droneinfo.app/v1/demo/weather/point?lat=47.5615&lon=-52.7126"

Run it for St. John's in the browser