In English

ECCC logo

TdM > GeoMet du SMC > OGC API

OGC API


Les normes API de l'Open Geospatial Consortium (OGC) sont un ensemble de spécifications développées par l'OGC pour faciliter l'échange interopérable de données et de services géospatiaux sur le web. Ces normes sont conçues pour permettre une intégration et un partage transparents des informations géospatiales entre différents systèmes, applications et organisations. La documentation suivante présente les bases des normes OGC API - Features et OGC API - Coverages et fournit des exemples d'interrogation de GeoMet-OGC-API à l'aide de ces normes.

Points d'accès principaux

GET / - Page d'accueil

https://api.meteo.gc.ca

La page d'accueil GeoMet-OGC-API avec des liens pour visualiser les collections de données, les processus et les classes de conformité mises en œuvre par l'API.

GET /collections - Toutes les collections de données

https://api.meteo.gc.ca/collections

Récupère les informations décrivant l'ensemble des collections prises en charge et fournit une liste des collections avec le type de données et une brève description.

GET collections/{collectionID} - Informations spécifiques à la collection

https://api.meteo.gc.ca/collections/hydrometric-daily-mean

Récupère des informations descriptives sur une collection spécifique, soit de type entité, soit de type couverture. Par exemple, l'URL ci-dessus renvoie la page racine de la collection d'entités Stations de surveillance hydrométrique.

GET /openapi - Documentation de l'OpenAPI

https://api.meteo.gc.ca/openapi

Les liens de la documentation de l'API fournissent une page Swagger de l'API comme outil pour les développeurs afin de fournir des exemples de capacités de demande/réponse/requête. Une représentation JSON est également fournie.

GET /conformance - Définition de la conformité de l'API

https://api.meteo.gc.ca/conformance

La page de conformité fournit une liste d'URL correspondant aux classes de conformité de l'API de l'OGC supportées par GeoMet-OGC-API.

Paramètres de requête communs

La section suivante fournit des informations sur les paramètres de requête courants, souvent utilisés lors de l'envoi de requêtes aux types de collection Feature et Coverage. Les paramètres de requête sont transmis avec l'URL de la requête en utilisant le caractère ? pour séparer le paramètre de requête de l'URL et le caractère & pour séparer plusieurs paramètres de requête.

f - Format du paramètre de requête

https://api.meteo.gc.ca/collections/?f=json avec le format json.

Le paramètre de requête format est utilisé pour spécifier le format de la réponse du serveur. Selon le type de collection, la valeur du paramètre de requête du format peut être l'une des suivantes : html, json. L'exemple ci-dessus renvoie la liste des collections disponibles de GeoMet-OGC-API sous forme d'objet JSON.

Pour les collections d'entités, les résultats peuvent également être renvoyés sous forme de fichier CSV via ?f=csv

Pour les collections de couverture, le format de sortie de la couverture peut être spécifié via ce paramètre. En fonction de la collection et des formats de sortie supportés, les valeurs suivantes sont supportées : GRIB, GeoTiff, et NetCDF dans GeoMet-OGC-API.

bbox - Paramètre de requête pour une boîte de délimitation

https://api.meteo.gc.ca/collections/aqhi-observations-realtime/items?bbox=-71,46,-65,49

Permet d'extraire des informations en fonction d'une région spécifique ou d'une boîte de délimitation. Il s'agit d'une zone rectangulaire définie par deux ensembles de coordonnées qui représentent les extensions minimale et maximale de la boîte. Les valeurs des coordonnées bbox doivent être comprises dans les limites de EPSG:4326. Les coordonnées spécifiées doivent être dans l'ordre suivant : minX, minY, maxX, maxY.

datetime - Paramètre de requête de date

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items?datetime=1972-10-30

Recherche d'informations en fonction d'une date, d'une année ou d'un intervalle de temps spécifique. Il est fortement recommandé d'utiliser des chaînes de dates conformes à la norme RFC 3339 (c'est-à-dire YYYY-MM-DD ou YYYY-MM-DDTHH:MM:SSZ). Le paramètre datetime peut être utilisé en conjonction avec le mot-clé .. pour spécifier une période de temps. Par exemple, datetime=2012-05-20/.. renvoie tous les éléments à partir de 2015-05-20. datetime=../2015-11-11 renvoie tous les éléments antérieurs à 2015-11-11.

OGC API - Features

La norme OGC API - Features (OAFeat) fournit une liste de spécifications normalisées pour l'interrogation de données géospatiales vectorielles (points, lignes et polygones) sur le web. Vous trouverez ci-dessous des exemples de points d'extrémité de collecte de caractéristiques OGC-API, des exemples de filtrage spatial, temporel et de propriété, ainsi que des détails supplémentaires concernant la pagination.

GET collections/{collectionID}/items - Éléments de la collection

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items

Retourne les entités spécifiques d'une collection.

L'URL ci-dessus renvoie des éléments de la collection hydrometric-daily-mean : Items de la collection

GET collections/{collectionID}/items/{itemID}
Vue d'ensemble d'une seule entité

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items/01AA002

Renvoie l'élément de la collection demandée avec l'ID correspondant et fournit l'ensemble de ses propriétés.

L'URL ci-dessus renvoie l'élément avec l'ID 01AA002 de la collection stations hydrométriques : Item 01AA002

GET collections/{collectionID}/items?{paramètres de requête}
Interroger une collection d'entités

Les requêtes de collecte d'informations permettent de filtrer l'espace, le temps et les propriétés. Les paramètres de filtrage peuvent être combinés pour formuler une requête plus complexe. Le premier paramètre d'une requête doit être spécifié avec ? et les paramètres suivants avec &.

Vous trouverez ci-dessous quelques exemples de différents types de requêtes, allant de simples requêtes de filtrage bbox et datetime à des requêtes plus complexes composées de plusieurs paramètres de requête. Toutes les requêtes portent sur la collection de caractéristiques hydometric-daily-mean.

Spatial

Requête par boîte englobante (minx, miny, maxx, maxxy).

https://api.meteo.gc.ca/collections/hydrometric-stations/items?bbox=-71,46,-65,49

Renvoie les éléments de la collection d'éléments qui intersectent la boîte de délimitation fournie : Carte avec la zone sélectionnée

Temporel

Recherche d'une valeur instantanée avec une seule date :

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items?datetime=1972-10-30

Renvoie les éléments de la collection d'éléments qui correspondent à la valeur de date fournie : Éléments de la collection qui correspondent à la date

Requête pour un intervalle de temps :

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items?datetime=1972-10-30/2010-07-31

Renvoie les éléments de la collection d'éléments qui se situent dans la plage de dates fournie : Entités selon un intervall de date

Interrogez par période de temps avec le mot-clé ouvert .. :

Propriété

Interrogation par une propriété de la collection d'entités :

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items?STATION_NUMBER=10CD001

Retourne les éléments de la collection d'éléments qui ont STATION_NUMBER = 10CD001. Entités selon le numéro de station

Pagination

Filtrer la liste des propriétés d'un élément interrogé

Interroger une collection d'éléments et renvoyer les caractéristiques pour lesquelles la liste des propriétés associées est limitée aux propriétés énumérées dans la valeur properties=. Par exemple, la requête ci-dessous retourne des propriétés reliées aux observations de pression atmosphérique, au format JSON.

https://api.meteo.gc.ca/collections/swob-realtime/items?lang=en&offset=0&sortby=-date_tm-value&url=CYRV&properties=date_tm-value%2Cmslp%2Cmslp-uom%2Cmslp-qa&f=json

Combinaison de paramètres de filtre

Interroger toutes les données hydrométriques moyennes journalières d'une seule station entre 2001 et 2010 :

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items?STATION_NUMBER=10CD001&datetime=2001-01-01/2010-12-31

Exporter au format CSV

Les résultats des requêtes effectuées sur les collections d'entités peuvent être exportés au format CSV en ajoutant &f=csv à la requête, ou en cliquant sur l'icône CSV en haut à droite de la page de la collection.

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items?f=csv

Tri

Les résultats d'une requête peuvent être triés en utilisant le paramètre sortby. Par défaut, l'ordre de tri est croissant. Pour un tri descendant, ajoutez le caractère - (moins) avant le nom de la propriété. Le tri par plusieurs propriétés est possible en fournissant une liste de propriétés séparées par des virgules au paramètre de requête sortby.

&sortby=PROPERTY tri l'attribut par odre croissant
&sortby=-PROPERTY tri l'attribut par odre décroissant.

Exemples avec la propriété DATE:

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items?STATION_NUMBER=01AP004&startindex=1000&limit=1000&sortby=DATE croissant

https://api.meteo.gc.ca/collections/hydrometric-daily-mean/items?STATION_NUMBER=01AP004&startindex=1000&limit=1000&sortby=-DATE décroissant


OGC API - Coverages

La norme OGC API - Coverages spécifie les éléments fondamentaux de l'API pour interagir avec les couvertures (données matricielles). La communauté des données spatiales utilise le terme "couverture" pour désigner des ensembles homogènes de valeurs situées dans l'espace et dans le temps, telles que des données provenant de capteurs spatio-temporels, d'images, de simulations et de statistiques.

GET collections/{coverageId} - Page d'accueil de la collection de couvertures

https://api.meteo.gc.ca/collections/climate:cmip5:historical:annual:anomaly

Récupère les métadonnées de couverture détaillées pour la collection spécifiée. La réponse en JSON pour cette page affiche l'étendue géographique de la collection, la taille de la grille et les étendues (spatiale, temporelle et toute dimension additionnelle). La page racine de la collection présente aussi d'autres liens associés à la collection tels que le schéma de la collection (champs disponibles) et les URLs de couverture pour chaque format permis par la collection.

GET collections/{coverageId}/schema - Schéma de la couverture

https://api.meteo.gc.ca/collections/climate:cmip5:historical:annual:anomaly/schema

Récupère le schéma de la collection de couverture. Le schéma fournit une liste des champs disponibles et leurs types de données. Le schéma peut être retourné en format JSON ou HTML et peut être utilisé pour comprendre les champs disponibles des données de couverture.

GET collections/{coverageId}/coverage - Requête de couverture sans paramètres

https://api.meteo.gc.ca/collections/climate:cmip5:historical:annual:anomaly/coverage

Renvoie les données de couverture pour la collection spécifiée. La réponse inclura toutes les données disponibles de la collection, ce qui peut représenter un volume important. Il est recommandé d’utiliser des paramètres de requête pour filtrer les données retournées. Les données peuvent être retournées dans différents formats, comme CoverageJSON, GRIB ou NetCDF, selon la collection et les formats de sortie qu’elle prend en charge. Consultez les liens de la page racine de la collection pour connaître les formats disponibles.

GET collections/{coverageId}/coverage?{paramètres}
Couverture avec paramètres de requête

Les requêtes sur les collections de couvertures permettent un filtrage spatial, temporel et de l'étendue dans l'espace à n dimensions de la couverture elle-même. Le premier paramètre d'une requête doit être spécifié avec ? et les paramètres suivants avec &.

Spatial

Requête par boîte englobante (minx, miny, maxx, maxxy).

https://api.meteo.gc.ca/collections/climate:cmip5:historical:annual:anomaly/coverage?f=json&bbox=-80.557251,42.561173,-75.135498,44.805224

Temporel

Champ du schéma

Requête pour un champ spécifique du schéma avec le paramètre de requête properties. Par exemple, la requête ci-dessous permet de récupérer les données de couverture pour le champ nommé "sit" (épaisseur de la glace de mer).

https://api.meteo.gc.ca/collections/climate:cmip5:historical:annual:anomaly/coverage?properties=sit

Dimensions supplémentaires

Interrogez des dimensions supplémentaires (autres que les dimensions spatiales et temporelles, interrogées respectivement via les paramètres bbox et datetime) avec le paramètre de requête subset. Les dimensions supplémentaires disponibles sont répertoriées sous la clé extent à la racine de la collection de couverture, via la réponse JSON uniquement.

https://api.meteo.gc.ca/collections/climate:cmip5:historical:annual:anomaly/coverage?subset=percentile(25)

Combinaison de paramètres de filtrage

Interroger la couverture avec un filtre spatial, un filtre temporel et un filtre pour un champ spécifique via le paramètre de requête properties.

Retourne au format json par défaut :

https://api.meteo.gc.ca/collections/climate:cmip5:historical:annual:anomaly/coverage?bbox=-80.557251,42.561173,-75.135498,44.805224&properties=sfcWind&datetime=1901/1905

Exporter au format GeoTiff ou NetCDF

Les requêtes pointant vers les pages des collections peuvent être exportées au format GeoTiff et au format NetCDF s'il est disponible. Consultez la racine d'une collection de couverture donnée pour identifier les formats de données de réponse disponibles. Par exemple, la racine d'une collection de couverture donnée peut être consultée pour identifier les formats de données disponibles :

https://api.meteo.gc.ca/collections/climate:cmip5:projected:annual:absolute?f=json

Sous la clé links, les valeurs disponibles pour le paramètre ?f peuvent être trouvées. Dans ce cas, les données de couverture peuvent être demandées en JSON via ?f=json ou en NetCDF via ?f=NetCDF.


OGC API - Filtrage avancé avec CQL2

L'API GeoMet-OGC prend en charge le filtrage des données à l’aide du langage de requête commun (Common Query Language, CQL2) via le paramètre de requête ?filter dans la requête HTTP. CQL2 est une norme de l’OGC conçue pour prendre en charge des requêtes avancées sur les données géospatiales et effectuer le filtrage directement sur le serveur. En utilisant CQL2, les clients peuvent réduire la quantité de données retournées et ne récupérer que les données pertinentes.

CQL2 permet aux utilisateurs de construire des requêtes flexibles et précises basées sur les attributs et la géométrie des entités.

  • Correspondances exactes : = recherche les entités pour lesquelles un attribut possède une valeur exacte.
  • Chaînes partielles ou mots-clés : LIKE avec le caractère générique %.
  • Opérateurs de comparaison : >, <, >=, <= permettent de filtrer les valeurs numériques ou temporelles.
  • Opérateurs logiques : AND, OR, NOT permettent de comparer des conditions.
  • Prédicats spatiaux : INTERCEPTS, DISJOINT permettent de filtrer selon la géométrie.

La liste complète des prédicats disponibles est accessible dans la norme OGC CQL2.

Les valeurs de type chaîne doivent être placées entre guillemets simples '' et le chemin de la propriété (properties.attribute) doit correspondre exactement au nom de l'attribut défini dans le schéma de la collection (sensible à la casse).

Pour les collections GeoMet-OGC-API, la syntaxe est :

https://api.meteo.gc.ca/collections/{collectionID}/items?filter=<expression CQL2>&<expression CQL2>

1. Recherche de correspondances exactes

1.1) Filtrer tous les bulletins météorologiques de type CA provenant du bureau émetteur AO.

CQL2: ?filter=properties.type=CA AND properties.issuing_office=AO

https://api.meteo.gc.ca/collections/bulletins-realtime/items?filter=properties.type=CA AND properties.issuing_office=AO &lang=fr

1.2) Filtrer Climat - Observations quotidiennes par l'attribut LOCAL_DAY. Ici, LOCAL_DAY doit être en majuscules, conformément au schéma.

CQL2: ?filter=properties.LOCAL_DAY=15

https://api.meteo.gc.ca/collections/climate-daily/items?filter=properties.LOCAL_DAY=15 &lang=fr


2. Recherche de mots clés partiels

CQL2 prend en charge la correspondance partielle de texte grâce à l'opérateur LIKE. Il permet de rechercher des sous-chaînes dans des attributs textuels en utilisant le caractère générique %, qui peut représenter zéro ou plusieurs caractères. La comparaison est insensible à la casse, mais la chaîne de recherche doit être saisie en minuscules et entre guillemets simples. Si la valeur de l'attribut contient plusieurs mots, le prédicat LIKE est appliqué à la valeur textuelle entière, comparant le motif à toute sous-chaîne présente.

2.1) Trouver tous les STATION_NAME contenant le mot-clé LAKE. Dans ce cas, '%lak%' correspond à des mots clés insensibles à la casse, tels que Lake, lak5, SPOKIN LAKE 4E, 2LAKE9, LaK.

CQL2: ?filter=properties.STATION_NAME LIKE '%lak%'

https://api.meteo.gc.ca/collections/climate-normals/items?filter=properties.STATION_NAME LIKE '%lak%' &lang=fr

2.2) Filtrer uniquement le nom spécifique de la station dont le nom est ou n'est pas (NOT) dans une liste donnée. Le caractère générique % peut également être utilisé dans la liste.

CQL2: ?filter=properties.STATION_NAME NOT IN ('lake', 'river')

https://api.meteo.gc.ca/collections/climate-normals/items?filter=properties.STATION_NAME NOT IN ('lake', 'river') &lang=fr

2.3) Pour filtrer plusieurs mots, vous avez besoin de deux prédicats LIKE différents. Dans ce cas, spécifier 'quinsam' AND 'river' permet de filtrer les noms de stations contenant à la fois les mots-clés 'quinsam' et 'river'. L'utilisation de OR renverrait le nom de la station contenant soit « quinsam », soit « river », soit les deux.

CQL2: ?filter=properties.STATION_NAME LIKE '%quisam%' AND properties.STATION_NAME LIKE '%river%'

https://api.meteo.gc.ca/collections/climate-normals/items?filter=properties.STATION_NAME LIKE '%quinsam%' AND properties.STATION_NAME LIKE '%river%' &lang=fr

2.4) Extraire le nom de la station commençant par la lettre K. Vous pouvez placer le caractère générique % selon vos besoins. Ici, vous constatez que ce n'est pas forcément le premier mot du nom de la station qui correspond. Le prédicat LIKE compare tous les mots-clés du texte.

CQL2: ?filter=properties.STATION_NAME LIKE 'k%'

https://api.meteo.gc.ca/collections/climate-normals/items?filter=properties.STATION_NAME LIKE 'k%' &lang=fr CQL Wildcard debut

2.5) Extraire le nom de la station se terminant par la lettre T. Vous pouvez placer le caractère générique % selon les besoins. Ici, vous constatez que ce n’est pas nécessairement le dernier mot du nom de la station qui correspond. Le prédicat LIKE compare tous les mots clés du texte.

CQL2: ?filter=properties.STATION_NAME LIKE '%t'

https://api.meteo.gc.ca/collections/climate-normals/items?filter=properties.STATION_NAME LIKE '%t' &lang=fr CQL Wildcard fin

2.6) Recherche de bulletins météorologiques par identifiant. Il n'est pas possible d'effectuer une recherche manuelle par id sur l'interface. Les utilisateurs peuvent utiliser des filtres CQL2 et s'appuyer sur la documentation de la nomenclature des noms de fichiers des bulletins.

CQL2 : ?filter=properties.identifier LIKE '%WWCN70%'

https://api.meteo.gc.ca/collections/bulletins-realtime/items/?filter=properties.identifier LIKE '%wwcn70%' &lang=fr

2.7) Recherche de bulletins avec un mot-clé partiel CYOY dans l'URL.

CQL2: ?filter=properties.type=SA AND properties.issuer_code=CWAO AND properties.url LIKE '%cyoy%'

https://api.meteo.gc.ca/collections/bulletins-realtime/items?filter=properties.type=SA AND properties.issuer_code=CWAO AND properties.url LIKE '%cyoy%' &lang=fr

?q= correspond à la fonctionnalité de recherche en texte intégral de l'API OGC de MSC GeoMet. La requête équivalente est :

https://api.meteo.gc.ca/collections/bulletins-realtime/items?type=SA&issuer_code=CWAO&q=*CYOY*


2.8) Recherche de bulletins par type et code d'émetteur.

CQL2: ?filter=((properties.type=SA OR properties.type=SP) AND (properties.issuer_code=CWAO OR properties.issuer_code=CYOY))

https://api.meteo.gc.ca/collections/bulletins-realtime/items/?filter=((properties.type=SA OR properties.type=SP) AND (properties.issuer_code=CWAO OR properties.issuer_code=CYOY)&lang=fr)


3. Recherche d'opérateurs de comparaison

CQL2 prend en charge les comparaisons numériques à l'aide d'opérateurs.

3.1) Filtrer les valeurs de températures TEMP de moins de 10 °C.

CQL2: ?filter=properties.TEMP< 10

https://api.meteo.gc.ca/collections/climate-hourly/items?filter=properties.TEMP < 10 &lang=fr

3.2) Filtrer les prévisions de la cote air santé (CAS) classées à faible risque (1 à 3).

CQL2: ?filter=properties.aqhi<=3

https://api.meteo.gc.ca/collections/aqhi-forecasts-realtime/items?filter=properties.aqhi<=3 &lang=fr

3.3) Filtrer les observations CAS inférieures à 2 situées dans une zone géographique spécifiée (Nouvelle-Écosse).

CQL2: ?bbox=-70,42,-60,45&filter=properties.aqhi<2

https://api.meteo.gc.ca/collections/aqhi-observations-realtime/items?bbox=-70,42,-60,45&filter=properties.aqhi<2 &lang=fr

CQL Nouvelle-Ecosse CAS


4. Recherche avec opérateur logique

CQL2 prend en charge le filtrage par plage grâce à l'opérateur BETWEEN. Cet opérateur inclut les deux valeurs limites. L'utilisation de BETWEEN est équivalente à >= et <=, mais améliore la lisibilité.

Syntaxe : [`NOT`] <attribute> BETWEEN <limite_inférieure> AND <limite_supérieure>

4.1) Filtrer les éléments selon la température TEMP comprise entre 10 °C et 12,5 °C. Pour les valeurs numériques (number), les guillemets ne sont pas nécessaires.

CQL2: ?filter=properties.TEMP BETWEEN 10 AND 12.5

https://api.meteo.gc.ca/collections/climate-hourly/items?filter=properties.TEMP BETWEEN 10 AND 12.5 &lang=fr

4.2) Filtrer les vents de direction nord-nord-est (NNE 23°) à nord-est (NE 45°) et de vitesse supérieure à 25 km/h.

CQL2: ?filter=properties.WIND_DIRECTION BETWEEN 23 AND 45 AND properties.WIND_SPEED >= 25

https://api.meteo.gc.ca/collections/climate-hourly/items?filter=properties.WIND_DIRECTION BETWEEN 23 AND 45 AND properties.WIND_SPEED >= 25 &lang=fr

4.3) Filtrer les éléments entre deux dates et heures. Les valeurs de date et d'heure doivent être placées entre guillemets simples, car elles sont définies comme string dans les interrogeables de la collection.

CQL2: ?filter=properties.LOCAL_DATE BETWEEN '2023-11-28 14:00:00' AND '2024-11-28 14:00:00'

https://api.meteo.gc.ca/collections/climate-hourly/items?filter=properties.LOCAL_DATE BETWEEN '2023-11-28 14:00:00' AND '2024-11-28 14:00:00' &lang=fr

CQL Climat Horaire

4.4) Recherche des observations de la cote air santé présentant un risque modéré uniquement (BETWEEN 4 AND 6) dans une BBOX.

CQL2: ?filter=BBOX(geometry, -140, 50, -85, 63) AND properties.aqhi BETWEEN 4 AND 6
CQL2: ?filter=BBOX(geometry, -140, 50, -85, 63) AND properties.aqhi>=7 (risque élevé)

https://api.meteo.gc.ca/collections/aqhi-observations-realtime/items?filter=BBOX(geometry, -140, 50, -85, 63) AND properties.aqhi BETWEEN 4 AND 6 &lang=fr


5. Recherches spatiales

Les recherches spatiales permettent aux utilisateurs de personnaliser leurs requêtes en fonction de leur localisation géographique.

5.1) Trouver les entités qui intersectent un polygone. Renvoie toutes les entités qui touchent, traversent, se trouvent à l'intérieur ou chevauchent un polygone. Un polygone à x côtés possède nécessairement x+1 points, car le dernier point est la répétition du premier pour fermer le polygone. Indiquez d'abord la longitude, puis la latitude.

CQL2: ?filter=INTERSECTS(geometry, POLYGON((lon_1 lat_1,lon_2 lat_2,lon_3 lat_3,lon_4 lat_4,lon_1 lat_1)))
CQL2: ?filter=INTERSECTS(geometry, POLYGON((-56 47,-55 47,-55 48,-56 48,-56 47)))

https://api.meteo.gc.ca/collections/swob-stations/items?filter=INTERSECTS(geometry, POLYGON((-56 47,-55 47,-55 48,-56 48,-56 47)))&lang=fr → Renvoie toutes les stations SWOB intersectant le polygone d'une largeur de 1 degré (longitude ouest-est) et d'une hauteur de 1 degré (latitude nord-sud).


5.2) Recherche les entités avec DISJOINT. Renvoie toutes les entités situées à l'extérieur d'un polygone et qui n'intersectent pas la géométrie. C'est l'inverse de INTERSECTS.

CQL2: ?filter=DISJOINT(geometry, POLYGON((lon_1 lat_1,lon_2 lat_2,lon_3 lat_3,lon_4 lat_4,lon_1 lat_1)))
CQL2: ?filter=DISJOINT(geometry, POLYGON((-80 42,-50 42,-50 60,-80 60,-80 42)))

https://api.meteo.gc.ca/collections/swob-stations/items?filter=DISJOINT(geometry, POLYGON((-80 42,-50 42,-50 60,-80 60,-80 42)))&lang=fr → Renvoie toutes les stations SWOB qui n'intersectent pas le polygone de 30 degrés de longitude et 18 degrés de latitude dans l'est du Canada.

CQL SWOB Station


Exemples de filtrage multi-paramètres

6.1) Filtrage des observations quotidiennes du climat pour une station météorologique de Lanaudière, durant les mois d'été chauds et humides, pour une station dont :

  • L'identifiant climatique est 7014160 (station de L'Assomption) ;
  • La température moyenne est comprise entre 18 °C et 28 °C ;
  • Les précipitations totales sont comprises entre 5 et 40 mm ;
  • L'année locale est comprise entre 2010 et 2020 ;
  • Le mois local est compris entre juin et septembre (JJAS).
CQL2: ?filter=CLIMATE_IDENTIFIER = '7014160' AND properties.MEAN_TEMPERATURE BETWEEN 18 AND 28 AND properties.TOTAL_PRECIPITATION ENTRE 5 AND 40 AND properties.LOCAL_YEAR ENTRE 2010 AND 2020 AND properties.LOCAL_MONTH ENTRE 6 AND 9

https://api.meteo.gc.ca/collections/climate-daily/items?filter=CLIMATE_IDENTIFIER = '7014160' AND properties.MEAN_TEMPERATURE BETWEEN 18 AND 28 AND properties.TOTAL_PRECIPITATION BETWEEN 5 AND 40 AND properties.LOCAL_YEAR BETWEEN 2010 AND 2020 AND properties.LOCAL_MONTH BETWEEN 6 AND 9 &lang=fr

CQL Station Assomption

6.2) Trouvez toutes les observations de la cote air santé (CAS) à l'intérieur d'un polygone autour de Calgary pour aujourd'hui, où la valeur de la CAS est supérieure à 4 (risque modéré).

CQL2: ?filter=INTERSECTS(geometry,POLYGON((-114.2 50.9, -113.8 50.9, -113.8 51.2, -114.2 51.2, -114.2 50.9))) AND properties.aqhi>4

https://api.meteo.gc.ca/collections/aqhi-observations-realtime/items?filter=INTERSECTS(geometry,POLYGON((-114.2 50.9, -113.8 50.9, -113.8 51.2, -114.2 51.2, -114.2 50.9))) AND properties.aqhi>4 &lang=fr

CQL Intersects Calgary

6.3) Récupérer les stations météorologiques répondant à toutes les conditions suivantes :

  • Situées à l’intérieur d’un polygone spécifié (région de l’Ouest canadien) avec INTERSECTS;
  • Possède une station contenant le mot-clé « LAKE » avec LIKE;
  • Enregistrer une température minimale comprise entre -20 et -10 °C;
  • Enregistrer des rafales de vitesse maximale supérieures à 20 km/h.
CQL2: ?filter=INTERSECTS(geometry,POLYGON((-140 48,-95 48,-95 60,-140 60,-140 48))) AND properties.STATION_NAME LIKE '%lake%' AND properties.MIN_TEMPERATURE BETWEEN -20 AND -10 AND properties.SPEED_MAX_GUST >= 20

https://api.meteo.gc.ca/collections/climate-daily/items?filter=INTERSECTS(geometry,POLYGON((-140 48,-95 48,-95 60,-140 60,-140 48))) AND properties.STATION_NAME LIKE '%lake%' AND properties.MIN_TEMPERATURE BETWEEN -20 AND -10 AND properties.SPEED_MAX_GUST >= 20 &lang=fr

6.4a) Identifier les régions à risque élevé d'incendies de forêt (conditions sèches, chaudes et venteuses) pour la saison des feux de forêt de 2025.

  • Durant la saison des feux de forêt de 2025 (avril à octobre) :
  • Températures élevées (>= 30°C) ;
  • Faible humidité relative (<= 30%) ;
  • Vents forts (vitesse >= 30 km/h).
Climat - Observations horaires
CQL2: ?filter=properties.LOCAL_YEAR=2025 AND properties.LOCAL_HOUR=12 AND properties.LOCAL_MONTH BETWEEN 4 AND 10 AND properties.TEMP >=30 AND properties.RELATIVE_HUMIDITY <=30 AND properties.WIND_SPEED >= 30

https://api.meteo.gc.ca/collections/climate-hourly/items?filter=properties.LOCAL_YEAR=2025 AND properties.LOCAL_HOUR=12 AND properties.LOCAL_MONTH BETWEEN 5 AND 8 AND properties.TEMP >=30 AND properties.RELATIVE_HUMIDITY <=30 AND properties.WIND_SPEED >= 30 &lang=fr

6.4b) En utilisant les mêmes conditions que pour les observations horaires, nous ajoutons maintenant la quantité totale de précipitations sur 24 heures (issue de Climat - Observations quotidiennes) pour tenir compte de la sécheresse. Les précipitations totales sur 24 heures sont inférieures à une valeur arbitraire de 3 mm.

Climat - Observations quotidiennes
CQL2: ?filter=properties.LOCAL_YEAR=2025 AND properties.LOCAL_MONTH BETWEEN 4 AND 10 AND properties.MAX_TEMPERATURE>=30 AND properties.MIN_REL_HUMIDITY<=30 AND properties.SPEED_MAX_GUST>30 AND properties.TOTAL_PRECIPITATION<=3

https://api.meteo.gc.ca/collections/climate-daily/items?filter=properties.LOCAL_YEAR=2025 AND properties.LOCAL_MONTH BETWEEN 5 AND 8 AND properties.MAX_TEMPERATURE>=30 AND properties.MIN_REL_HUMIDITY<=30 AND properties.SPEED_MAX_GUST>30 AND properties.TOTAL_PRECIPITATION<=3 &lang=fr

CQL URL Feu Foret CQL Feu Foret


Commande Curl et Python

Il a été démontré qu'il est possible d'effectuer une requête HTTP avec des filtres CQL2 directement dans la barre de recherche du moteur de recherche. Il est également possible de récupérer les données via la commande curl dans le terminal. Pour enregistrer le résultat de la requête, utilisez l'option -o.

  • Utilisation de curl avec l'URL complète encodée.
curl [url_encodée] [option]
curl hhttps://api.meteo.gc.ca/collections/climate-hourly/items?filter=properties.WIND_DIRECTION%20BETWEEN%2023%20AND%2045%20AND%20properties.WIND_SPEED%20%3E=%2025%20&lang=fr -o /chemin/vers/fichier_de_sortie.json
  • Encodage direct de l'URL avec les options de requête GET --data-urlencode et -G. Il est possible d'ajouter plusieurs paramètres --data-urlencode (équivalent à &).
curl -G [basepath] --data-urlencode [CQL2 EXPRESSION]
curl -G "https://api.meteo.gc.ca/collections/climate-hourly/items?" --data-urlencode "filter=properties.WIND_DIRECTION BETWEEN 23 AND 45 AND properties.WIND_SPEED >=25" --data-urlencode "lang=fr"

Requêtes avec Python
Pour interpréter les filtres CQL2 et effectuer des requêtes HTTP, installez les modules Python pygeofilter et requests.

pip3 install pygeofilter requests
import requests
import json
from pygeofilter.parsers.ecql import parse

# Point de terminaison de l'API GeoMet-OGC.
api_url = "https://api.meteo.gc.ca/collections/climate-daily/items"

# Filtres CQL2.
cql_filter = (
    "properties.LOCAL_YEAR = 2025 AND "
    "properties.LOCAL_MONTH BETWEEN 6 AND 9 AND "
    "properties.MAX_TEMPERATURE >= 30"

)
# Valider les filtres CQL2 avant la requête API.
try:
    parse(cql_filter)
except Exception as e:
    raise ValueError(f"Filtre CQL2 invalide : {e}")

params = {
    "filter": cql_filter,
    "lang": "fr",
    "limit": 100
}
# Envoie une requête GET à l'API et encode l'URL.
response = requests.get(api_url, params=params)
print(f"L'URL encodée est : {response.url}")

# Formate le JSON dans le fichier de sortie.
data = response.json()
climate_output_file = "climat_joursAuDessusDe30deg_JJAS_2025.json"
with open(climate_output_file, "w") as fh:
    json.dump(data, fh)