Maestro data manipulation

Reprojection de données géostationnaires

Les fichiers netcdf des données de l’imageur SEVIRI (embarqué sur Meteosat 10 pour la position MSG+0000) et téléchargés via le SATMOS possèdent des coordonnées X,Y projetées en mètres. Or, souvent la recherche de coordonnées se fait en lat/lon.

La reprojection des fichiers est possible. Autrement, ce notebook montre comment utiliser le fichier de navigation de MSG+0000 afin de retrouver les coordonnées lat/lon correspondantes aux pixels du fichier de données msg.

Les fichiers de MSG sont aussi disponibles chez ICARE.

J. TRULES pour MAESTRO

import xarray as xr
import numpy as np
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib
from matplotlib import pyplot as plt
from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER
from metpy.plots import add_timestamp, colortables
from metpy.plots.ctables import registry
import datetime
import datetime as dt
catalog_url = "https://thredds-x.ipsl.fr/thredds/catalog/MAESTRO/SATELLITES/MSG/2024/2024_09_10/catalog.html"
opendap_url = "https://thredds-x.ipsl.fr/thredds/dodsC/MAESTRO/SATELLITES/MSG/2024/2024_09_10/"
navig_url = "https://thredds-x.ipsl.fr/thredds/dodsC/MAESTRO/SATELLITES/test/MSG+0000.3km.nc"
navig = "MSG+0000.3km.nc"
file = "Mmultic3kmNC4_msg03_202409101800.nc"

Ouverture de la navigation

Le fichier de navigation est de la forme suivante

ds_navig = xr.open_dataset(navig_url)
display(ds_navig)
<xarray.Dataset> Size: 551MB
Dimensions:          (Nlin: 3712, Ncol: 3712)
Dimensions without coordinates: Nlin, Ncol
Data variables:
    Latitude         (Nlin, Ncol) float64 110MB ...
    Longitude        (Nlin, Ncol) float64 110MB ...
    View_Zenith      (Nlin, Ncol) float64 110MB ...
    View_Azimuth     (Nlin, Ncol) float64 110MB ...
    Pixel_Area_Size  (Nlin, Ncol) float64 110MB ...
Attributes: (12/26)
    Product_Version:          1.0
    Production_Date:          2013-07-09T14:52:20Z
    Software_Version:         1.0.1
    Production_Center:        ICARE Data and Services Center
    Contact:                  contact@icare.univ-lille1.fr
    Ancillary_Files:          None
    ...                       ...
    creation_date:            mar. avril 11 10:26:41 CEST 2017
    NCL_Version:              6.1.2
    system:                   Linux camelot.ipsl.polytechnique.fr 2.6.32-431....
    Conventions:              None
    hdf_source:               MSG+0000.3km.hdf
    title:                    NCL: convert-HDF-to-netCDF

Les latitudes et longitudes s’agencent comme suit

ds_navig.Latitude[1850:1860, 1850:1855].values
array([[ 0.16281833,  0.16281828,  0.16281825,  0.16281822,  0.16281819],
       [ 0.13568185,  0.13568181,  0.13568178,  0.13568176,  0.13568175],
       [ 0.10854542,  0.10854539,  0.10854537,  0.10854536,  0.10854534],
       [ 0.08140903,  0.08140901,  0.08140899,  0.08140898,  0.08140897],
       [ 0.05427267,  0.05427266,  0.05427265,  0.05427264,  0.05427263],
       [ 0.02713633,  0.02713632,  0.02713632,  0.02713631,  0.02713631],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [-0.02713633, -0.02713632, -0.02713632, -0.02713631, -0.02713631],
       [-0.05427267, -0.05427266, -0.05427265, -0.05427264, -0.05427263],
       [-0.08140903, -0.08140901, -0.08140899, -0.08140898, -0.08140897]])
ds_navig.Longitude[1850:1855, 1854:1859].values
array([[-0.05390616, -0.02695308,  0.        ,  0.02695308,  0.05390616],
       [-0.05390608, -0.02695304,  0.        ,  0.02695304,  0.05390608],
       [-0.05390602, -0.026953  ,  0.        ,  0.026953  ,  0.05390602],
       [-0.05390597, -0.02695298,  0.        ,  0.02695298,  0.05390597],
       [-0.05390593, -0.02695296,  0.        ,  0.02695296,  0.05390593]])

Determiner quels sont les pixels correspondants aux lat,lon recherchés

Pour la campagne MAESTRO un CROP était nécessaire pour le partage vers le logiciel de l’ATR42. La zone était carré avec les points suivants (Bas gauche : Lon -4.37753 Lat 39.38261 — Haut droite : Lon 7.118742 Lat 47.717034)

sur le plot suivant, on va visualiser toutes le latitudes sur la colonne 1854, qui correspond au milieu du tableau donc à ~ 0° en longitude

ds_navig.Latitude.loc[:,1854].plot()

si on va a l’extremité du tableau, la plage diminue

ds_navig.Latitude.loc[:,3554].plot()

On va filtrer les indices selon les lat/lon désirées

ds_filt = ds_navig.where( (ds_navig.Latitude > 13.4) & (ds_navig.Latitude < 20.1) & (ds_navig.Longitude > -26.4) & (ds_navig.Longitude < -19.47),drop=True)

Il faut d’abord assigner les pixels en tant que dimensions puis renommer ces dimensions afi d’être compatibles avec celles du fichier de données satellies (TB)

ds_navig_renamed=ds_navig.assign_coords({"Nlin":("Nlin", ds_navig.Nlin.data),"Ncol":("Ncol", ds_navig.Ncol.data)}).rename_dims({'Nlin':'ny','Ncol':'nx'})
ds_navig_renamed
<xarray.Dataset> Size: 551MB
Dimensions:          (ny: 3712, nx: 3712)
Coordinates:
  * Nlin             (ny) int64 30kB 0 1 2 3 4 5 ... 3707 3708 3709 3710 3711
  * Ncol             (nx) int64 30kB 0 1 2 3 4 5 ... 3707 3708 3709 3710 3711
Dimensions without coordinates: ny, nx
Data variables:
    Latitude         (ny, nx) float64 110MB nan nan nan nan ... nan nan nan nan
    Longitude        (ny, nx) float64 110MB nan nan nan nan ... nan nan nan nan
    View_Zenith      (ny, nx) float64 110MB ...
    View_Azimuth     (ny, nx) float64 110MB ...
    Pixel_Area_Size  (ny, nx) float64 110MB ...
Attributes: (12/26)
    Product_Version:          1.0
    Production_Date:          2013-07-09T14:52:20Z
    Software_Version:         1.0.1
    Production_Center:        ICARE Data and Services Center
    Contact:                  contact@icare.univ-lille1.fr
    Ancillary_Files:          None
    ...                       ...
    creation_date:            mar. avril 11 10:26:41 CEST 2017
    NCL_Version:              6.1.2
    system:                   Linux camelot.ipsl.polytechnique.fr 2.6.32-431....
    Conventions:              None
    hdf_source:               MSG+0000.3km.hdf
    title:                    NCL: convert-HDF-to-netCDF
ds_filt = ds_navig_renamed.where( (ds_navig_renamed.Latitude > 13.4) & (ds_navig_renamed.Latitude < 20.1) & (ds_navig_renamed.Longitude > -26.4) & (ds_navig_renamed.Longitude < -19.47),drop=True)
ds_filt
<xarray.Dataset> Size: 2MB
Dimensions:          (ny: 233, nx: 246)
Coordinates:
  * Nlin             (ny) int64 2kB 1147 1148 1149 1150 ... 1376 1377 1378 1379
  * Ncol             (nx) int64 2kB 959 960 961 962 963 ... 1201 1202 1203 1204
Dimensions without coordinates: ny, nx
Data variables:
    Latitude         (ny, nx) float64 459kB nan nan nan nan ... nan nan nan nan
    Longitude        (ny, nx) float64 459kB nan nan nan nan ... nan nan nan nan
    View_Zenith      (ny, nx) float64 459kB nan nan nan nan ... nan nan nan nan
    View_Azimuth     (ny, nx) float64 459kB nan nan nan nan ... nan nan nan nan
    Pixel_Area_Size  (ny, nx) float64 459kB nan nan nan nan ... nan nan nan nan
Attributes: (12/26)
    Product_Version:          1.0
    Production_Date:          2013-07-09T14:52:20Z
    Software_Version:         1.0.1
    Production_Center:        ICARE Data and Services Center
    Contact:                  contact@icare.univ-lille1.fr
    Ancillary_Files:          None
    ...                       ...
    creation_date:            mar. avril 11 10:26:41 CEST 2017
    NCL_Version:              6.1.2
    system:                   Linux camelot.ipsl.polytechnique.fr 2.6.32-431....
    Conventions:              None
    hdf_source:               MSG+0000.3km.hdf
    title:                    NCL: convert-HDF-to-netCDF

Ouverture du fichier MSG

ds_msg = xr.open_dataset(opendap_url + file, decode_timedelta=True)
ds_msg
<xarray.Dataset> Size: 1GB
Dimensions:                        (ny: 3712, nx: 3712, Numerical_count: 65536)
Dimensions without coordinates: ny, nx, Numerical_count
Data variables: (12/31)
    time                           datetime64[ns] 8B ...
    dtime                          (ny, nx) timedelta64[ns] 110MB ...
    IR_016                         (ny, nx) float64 110MB ...
    commentaires                   |S64 64B ...
    satellite                      |S64 64B ...
    geos                           |S64 64B ...
    ...                             ...
    VIS008                         (ny, nx) float64 110MB ...
    Albedo_to_Native_count_VIS008  (Numerical_count) float32 262kB ...
    WV_062                         (ny, nx) float64 110MB ...
    Temp_to_Native_count_WV_062    (Numerical_count) float32 262kB ...
    WV_073                         (ny, nx) float64 110MB ...
    Temp_to_Native_count_WV_073    (Numerical_count) float32 262kB ...
Attributes: (12/39)
    title:                        Merge many NC3 to one NC4
    history:                      Created on 2024-09-10 18:14 by CMS-Lannion ...
    institution:                  Meteo-France - Centre de Meteorologie Spatiale
    source:                       MSG HRIT File from direct read out
    comment:                      Status experimental
    references:                   none
    ...                           ...
    Conventions:                  CF-1.5
    ncml_version:                 2.2
    Rate_of_valid_data:           100.0
    Area_of_acquisition:          globe
    Scanning_direction:           south to north
    DODS.strlen:                  0
ds_msg.IR_108.plot()

tb_norm, tb_cmap = registry.get_with_steps('ir_rgbv', 0, 1)
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Geostationary())
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=1)
datRev = ds_msg.IR_108#.T[::-1].T[::-1]
x=ds_msg.X
y=ds_msg.Y
im = ax.imshow(datRev, extent=(x.min(), x.max(), y.min(), y.max()), origin='upper', cmap=tb_cmap)
# start_time = datetime.strptime(ds.start_date_time, '%Y%j%H%M%S')
start_time = dt.datetime.strptime(ds_msg.attrs['time_coverage_start'],'%Y-%m-%dT%H:%M:%SZ%f')
nameSat=ds_msg.attrs['summary']
standard_name = ds_msg['IR_108'].attrs['standard_name']
channel = ds_msg['IR_108'].long_name
add_timestamp(ax, time=start_time, pretext=f'MSG Ch. {channel} ',
              high_contrast=True, fontsize=16, y=0.01)
xlabel = "pixel X"
ylabel = "pixel Y"
plt.xlabel(xlabel)
plt.ylabel(ylabel)
cmapGlob = im.get_cmap()
climGlob = im.get_clim()
#cmap = plt.get_cmap('jet')
fig.colorbar(im, ax=ax).ax.set_title(ds_msg['IR_108'].attrs['standard_name'])
ax.coastlines(resolution='50m', color='black', linewidth=1)
/opt/conda/envs/tmp/lib/python3.12/site-packages/cartopy/io/__init__.py:241: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_coastline.zip
  warnings.warn(f'Downloading: {url}', DownloadWarning)

tb_norm, tb_cmap = registry.get_with_steps('ir_rgbv', 0, 1)
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Geostationary())
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=1)
datRev = ds_msg.IR_108.isel(ny=ds_filt.Nlin,nx=ds_filt.Ncol)
x=ds_msg.isel(ny=ds_filt.Nlin,nx=ds_filt.Ncol).X
y=ds_msg.isel(ny=ds_filt.Nlin,nx=ds_filt.Ncol).Y
#im = ax.imshow(datRev,  origin='upper', cmap=cmapGlob, clim=climGlob)
im = ax.imshow(datRev, extent=(x.min(), x.max(), y.min(), y.max()), origin='upper', cmap=cmapGlob, clim=climGlob)
# start_time = datetime.strptime(ds.start_date_time, '%Y%j%H%M%S')
start_time = dt.datetime.strptime(ds_msg.attrs['time_coverage_start'],'%Y-%m-%dT%H:%M:%SZ%f')
nameSat=ds_msg.attrs['summary']
standard_name = ds_msg['IR_108'].attrs['standard_name']
channel = ds_msg['IR_108'].long_name
add_timestamp(ax, time=start_time, pretext=f'MSG Ch. {channel} ',
              high_contrast=True, fontsize=16, y=0.01)
xlabel = "pixel X"
ylabel = "pixel Y"
plt.xlabel(xlabel)
plt.ylabel(ylabel)
#cmap = plt.get_cmap('jet')
fig.colorbar(im, ax=ax).ax.set_title(ds_msg['IR_108'].attrs['standard_name'])
ax.coastlines(resolution='50m', color='black', linewidth=1)

tb_norm, tb_cmap = registry.get_with_steps('ir_rgbv', 0, 1)
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Geostationary())
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=1)
datRev = ds_msg.IR_108.isel(ny=ds_filt.Nlin,nx=ds_filt.Ncol)
x=ds_msg.isel(ny=ds_filt.Nlin,nx=ds_filt.Ncol).X
y=ds_msg.isel(ny=ds_filt.Nlin,nx=ds_filt.Ncol).Y
im = ax.imshow(datRev, extent=(x.min(), x.max(), y.min(), y.max()), origin='upper', cmap=tb_cmap)
# start_time = datetime.strptime(ds.start_date_time, '%Y%j%H%M%S')
start_time = dt.datetime.strptime(ds_msg.attrs['time_coverage_start'],'%Y-%m-%dT%H:%M:%SZ%f')
nameSat=ds_msg.attrs['summary']
standard_name = ds_msg['IR_108'].attrs['standard_name']
channel = ds_msg['IR_108'].long_name
add_timestamp(ax, time=start_time, pretext=f'MSG Ch. {channel} ',
              high_contrast=True, fontsize=16, y=0.01)
xlabel = "pixel X"
ylabel = "pixel Y"
plt.xlabel(xlabel)
plt.ylabel(ylabel)
#cmap = plt.get_cmap('jet')
fig.colorbar(im, ax=ax).ax.set_title(ds_msg['IR_108'].attrs['standard_name'])
ax.coastlines(resolution='50m', color='black', linewidth=1)

Ci-dessous, le dataset réduit sur la zone

ds_msg.isel(ny=ds_filt.Nlin,nx=ds_filt.Ncol)
<xarray.Dataset> Size: 8MB
Dimensions:                        (ny: 233, nx: 246, Numerical_count: 65536)
Coordinates:
  * Nlin                           (ny) int64 2kB 1147 1148 1149 ... 1378 1379
  * Ncol                           (nx) int64 2kB 959 960 961 ... 1202 1203 1204
Dimensions without coordinates: ny, nx, Numerical_count
Data variables: (12/31)
    time                           datetime64[ns] 8B ...
    dtime                          (ny, nx) timedelta64[ns] 459kB ...
    IR_016                         (ny, nx) float64 459kB ...
    commentaires                   |S64 64B ...
    satellite                      |S64 64B ...
    geos                           |S64 64B ...
    ...                             ...
    VIS008                         (ny, nx) float64 459kB ...
    Albedo_to_Native_count_VIS008  (Numerical_count) float32 262kB ...
    WV_062                         (ny, nx) float64 459kB ...
    Temp_to_Native_count_WV_062    (Numerical_count) float32 262kB ...
    WV_073                         (ny, nx) float64 459kB ...
    Temp_to_Native_count_WV_073    (Numerical_count) float32 262kB ...
Attributes: (12/39)
    title:                        Merge many NC3 to one NC4
    history:                      Created on 2024-09-10 18:14 by CMS-Lannion ...
    institution:                  Meteo-France - Centre de Meteorologie Spatiale
    source:                       MSG HRIT File from direct read out
    comment:                      Status experimental
    references:                   none
    ...                           ...
    Conventions:                  CF-1.5
    ncml_version:                 2.2
    Rate_of_valid_data:           100.0
    Area_of_acquisition:          globe
    Scanning_direction:           south to north
    DODS.strlen:                  0
ds_msg.close()
ds_navig.close()

Lecture des données SENTINEL 5P chez ICARE

from owslib.wms import WebMapService
wms = WebMapService('https://thredds.icare.univ-lille.fr/thredds/wms/S5P_AER-AI_OFFL_D3/2024/S5P_AER-AI_OFFL_D3_2024-09-10_3600x1800_V1-01.nc', version='1.1.1')
wms
<owslib.map.wms111.WebMapService_1_1_1 at 0x7f63d277a150>
list(wms.contents)
['aerosol_index_340_380', 'aerosol_index_354_388']
img = wms.getmap(   layers=['aerosol_index_340_380'],
                    srs='EPSG:4326',
                    bbox=(-180, -90, 180, 90),
                    size=(2048, 2048),
                    format='image/png',
                    transparent=True
                    )
display(img)
out = open('s5p_mosaic.png', 'wb')
<owslib.util.ResponseWrapper at 0x7f63d23f0a10>
import io
image = io.BytesIO(img.read())

import matplotlib.pyplot as plt
data = plt.imread(image)
fig = plt.figure(figsize=(8,6))
ax = fig.add_axes([0,0,1,1], projection=ccrs.PlateCarree())
ax.imshow(data, origin="upper", extent=(-180, 180, -90, 90),vmin=-10,vmax=5)
ax.coastlines()
plt.show()
/opt/conda/envs/tmp/lib/python3.12/site-packages/cartopy/io/__init__.py:241: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/110m_physical/ne_110m_coastline.zip
  warnings.warn(f'Downloading: {url}', DownloadWarning)

Lecture de données de turbulence mesurées depuis l’avion

url_turbu='https://thredds-x.ipsl.fr/thredds/dodsC/MAESTRO/INSITU/AIRCRAFT/ATR/TURBULENCE/DATA/Moments/MAESTRO_ORCESTRA_ATR_TURBULENCE_MOMENTS_RF17_as240039_20240830_v0.nc'
ds_turbu = xr.open_dataset(url_turbu)
ds_turbu
<xarray.Dataset> Size: 34kB
Dimensions:              (index: 25)
Coordinates:
  * index                (index) |S64 2kB b'RF17_L2_1' ... b'RF17_H1_6'
Data variables: (12/132)
    date                 (index) |S64 2kB ...
    time_start           (index) |S64 2kB ...
    time_end             (index) |S64 2kB ...
    lat_start            (index) float64 200B ...
    lat_end              (index) float64 200B ...
    lat                  (index) float64 200B ...
    ...                   ...
    ERR_S_TMR            (index) float64 200B ...
    ERR_R_TMR            (index) float64 200B ...
    TKE_DR               (index) float64 200B ...
    R2_MR                (index) float64 200B ...
    name                 (index) |S64 2kB ...
    Heterogeneity_score  (index) float64 200B ...
Attributes:
    title:        Turbulent Moments for MAESTRO Flight RF17 (as240039) 2024-0...
    institution:  Laboratoire d Aerologie, Toulouse, France
    source:       MAESTROATR-42 field campaign, Island of Sal, Cabo-Verde  (1...
    history:      Created on 2025-09-23 16:17:49
    references:   associated dataset paper in writings
    Comment:      High rate turbulence processing. Segmentation is based on t...
    Authors:      Louis Jaffeux, Marie Lothon
ds_turbu
<xarray.Dataset> Size: 34kB
Dimensions:              (index: 25)
Coordinates:
  * index                (index) |S64 2kB b'RF17_L2_1' ... b'RF17_H1_6'
Data variables: (12/132)
    date                 (index) |S64 2kB ...
    time_start           (index) |S64 2kB ...
    time_end             (index) |S64 2kB ...
    lat_start            (index) float64 200B ...
    lat_end              (index) float64 200B ...
    lat                  (index) float64 200B ...
    ...                   ...
    ERR_S_TMR            (index) float64 200B ...
    ERR_R_TMR            (index) float64 200B ...
    TKE_DR               (index) float64 200B ...
    R2_MR                (index) float64 200B ...
    name                 (index) |S64 2kB ...
    Heterogeneity_score  (index) float64 200B ...
Attributes:
    title:        Turbulent Moments for MAESTRO Flight RF17 (as240039) 2024-0...
    institution:  Laboratoire d Aerologie, Toulouse, France
    source:       MAESTROATR-42 field campaign, Island of Sal, Cabo-Verde  (1...
    history:      Created on 2025-09-23 16:17:49
    references:   associated dataset paper in writings
    Comment:      High rate turbulence processing. Segmentation is based on t...
    Authors:      Louis Jaffeux, Marie Lothon
url_turbu='https://thredds-x.ipsl.fr/thredds/dodsC/MAESTRO/INSITU/AIRCRAFT/ATR/SAFIRE/priv/IMU2/MAESTRO-2024_SAFIRE-ATR42_SAFIRE_TUR_25HZ_20240910_as240045_L2_V1.nc'
ds_turbu = xr.open_dataset(url_turbu)
ds_turbu
<xarray.Dataset> Size: 151MB
Dimensions:                          (time: 448300, level: 2)
Coordinates:
  * time                             (time) datetime64[ns] 4MB 2024-09-10T11:...
    LONGITUDE                        (time) float32 2MB ...
    LATITUDE                         (time) float32 2MB ...
    ALTITUDE                         (time) float32 2MB ...
Dimensions without coordinates: level
Data variables: (12/77)
    trajectory                       |S64 64B ...
    time_bnds                        (time, level) datetime64[ns] 7MB ...
    ROLL                             (time) float32 2MB ...
    PITCH                            (time) float32 2MB ...
    HEADING                          (time) float32 2MB ...
    NORTH_SPEED                      (time) float32 2MB ...
    ...                               ...
    BRIGTHNESS_C3                    (time) float32 2MB ...
    EASTWARD_WIND                    (time) float32 2MB ...
    NORTHWARD_WIND                   (time) float32 2MB ...
    VERTICAL_WIND                    (time) float32 2MB ...
    WIND_DD                          (time) float32 2MB ...
    WIND_FF                          (time) float32 2MB ...
Attributes: (12/44)
    comment:                         Warning : Most measurements are not vali...
    source:                          airborne observation
    processing_level:                L2
    doi:                             
    date_modified:                   2025-04-17T22:04:53.409275Z
    date_created:                    2025-04-17T22:04:53.409275Z
    ...                              ...
    time_coverage_start:             2024-09-10T11:00:14.000000Z
    time_coverage_end:               2024-09-10T15:59:05.960000Z
    time_coverage_resolution:        PT0.040000S
    DODS.strlen:                     100
    DODS.dimName:                    string_length
    DODS_EXTRA.Unlimited_Dimension:  time
ds_turbu.RH_AERO.plot()

ds_turbu.ALTI_PRESSURE1.plot.scatter()

ds_turbu.ALTI_PRESSURE1.plot()

Lecture d’un catalogue STAC pour la decouverte des données

import pystac
import pystac_client
from pystac import Catalog, get_stac_version
from pystac.extensions.eo import EOExtension
from pystac.extensions.label import LabelExtension
url_stac = "https://aeris-recette.ipsl.fr/stac-api/"
from pystac_client import Client
headers = []
cat = Client.open(url_stac, headers=headers)
cat

Exemple de requête STAC (données horaires, lannemezan) :

curl -X ‘POST’   ‘https://aeris-recette.ipsl.fr/stac-api/search’   -H ‘accept: application/geo+json’   -H ‘Content-Type: application/json’   -d ‘{“collections”: [            “MTO-1H”  ],  “filter”: {    “or”: [     {“eq”:[{“property”:“platform”},“LANNEMEZAN”]}    ]  }}’

search = cat.search(
    max_items=5,
    limit=5,
    collections="MTO-1H"
)
search.get_all_items_as_dict()
/opt/conda/envs/tmp/lib/python3.12/site-packages/pystac_client/item_search.py:911: FutureWarning: get_all_items_as_dict() is deprecated, use item_collection_as_dict() instead.
  warnings.warn(
{'type': 'FeatureCollection',
 'features': [{'id': '98833002-1H',
   'bbox': [165.767333, -21.4555, 165.767333, -21.4555],
   'type': 'Feature',
   'links': [{'rel': 'collection',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'parent',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'root',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'self',
     'type': 'application/geo+json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H/items/98833002-1H'}],
   'assets': {'ncss': {'href': 'https://aeris-recette.ipsl.fr/thredds/ncss/point/MTO-1H/MEA-1H.ncml/dataset.html',
     'type': 'text/html',
     'roles': ['service'],
     'title': 'NetCDF Subset Service'},
    '98833002-1H.ncml': {'href': 'https://aeris-recette.ipsl.fr/stac/NCML//MTO-1H/MEA-1H.ncml',
     'type': 'application/xml',
     'roles': ['data'],
     'title': 'NCML aggregation'},
    '98833002_MEA_MTO_1H_2008.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2008/98833002_MEA_MTO_1H_2008.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2008'},
    '98833002_MEA_MTO_1H_2009.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2009/98833002_MEA_MTO_1H_2009.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2009'},
    '98833002_MEA_MTO_1H_2010.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2010/98833002_MEA_MTO_1H_2010.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2010'},
    '98833002_MEA_MTO_1H_2011.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2011/98833002_MEA_MTO_1H_2011.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2011'},
    '98833002_MEA_MTO_1H_2012.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2012/98833002_MEA_MTO_1H_2012.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2012'},
    '98833002_MEA_MTO_1H_2013.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2013/98833002_MEA_MTO_1H_2013.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2013'},
    '98833002_MEA_MTO_1H_2014.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2014/98833002_MEA_MTO_1H_2014.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2014'},
    '98833002_MEA_MTO_1H_2015.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2015/98833002_MEA_MTO_1H_2015.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2015'},
    '98833002_MEA_MTO_1H_2016.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2016/98833002_MEA_MTO_1H_2016.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2016'},
    '98833002_MEA_MTO_1H_2017.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2017/98833002_MEA_MTO_1H_2017.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2017'},
    '98833002_MEA_MTO_1H_2018.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2018/98833002_MEA_MTO_1H_2018.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2018'},
    '98833002_MEA_MTO_1H_2019.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2019/98833002_MEA_MTO_1H_2019.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2019'},
    '98833002_MEA_MTO_1H_2020.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2020/98833002_MEA_MTO_1H_2020.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2020'},
    '98833002_MEA_MTO_1H_2021.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2021/98833002_MEA_MTO_1H_2021.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2021'},
    '98833002_MEA_MTO_1H_2022.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2022/98833002_MEA_MTO_1H_2022.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2022'},
    '98833002_MEA_MTO_1H_2023.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2023/98833002_MEA_MTO_1H_2023.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2023'}},
   'geometry': {'type': 'Point', 'coordinates': [165.767333, -21.4555, 571]},
   'collection': 'MTO-1H',
   'properties': {'title': 'Data from the MEA weather station - 1H',
    'network': 'ETENDU',
    'platform': 'MEA',
    'providers': [{'name': 'METEO-FRANCE', 'roles': ['producer']},
     {'url': 'https://www.aeris-data.fr',
      'name': 'AERIS',
      'roles': ['processor', 'host']}],
    'stationId': '98833002',
    'end_datetime': '2025-01-09T00:00:00Z',
    'start_datetime': '2004-01-01T00:00:00Z',
    'acknowledgement': 'The authors would like to acknowledge Meteo-France for providing the standard meteorological variables used in this study, and the French national center for Atmospheric data and services AERIS for granting access to the data.'},
   'stac_version': '1.0.0',
   'stac_extensions': []},
  {'id': '98832101-1H',
   'bbox': [166.9675, -22.269167, 166.9675, -22.269167],
   'type': 'Feature',
   'links': [{'rel': 'collection',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'parent',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'root',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'self',
     'type': 'application/geo+json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H/items/98832101-1H'}],
   'assets': {'ncss': {'href': 'https://aeris-recette.ipsl.fr/thredds/ncss/point/MTO-1H/GORO_ANCIENNE_PEPINIERE-1H.ncml/dataset.html',
     'type': 'text/html',
     'roles': ['service'],
     'title': 'NetCDF Subset Service'},
    '98832101-1H.ncml': {'href': 'https://aeris-recette.ipsl.fr/stac/NCML//MTO-1H/GORO_ANCIENNE_PEPINIERE-1H.ncml',
     'type': 'application/xml',
     'roles': ['data'],
     'title': 'NCML aggregation'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2010.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2010/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2010.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2010'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2011.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2011/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2011.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2011'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2012.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2012/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2012.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2012'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2013.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2013/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2013.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2013'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2014.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2014/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2014.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2014'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2015.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2015/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2015.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2015'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2016.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2016/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2016.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2016'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2017.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2017/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2017.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2017'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2018.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2018/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2018.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2018'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2019.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2019/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2019.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2019'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2020.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2020/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2020.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2020'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2021.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2021/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2021.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2021'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2022.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2022/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2022.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2022'},
    '98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2023.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2023/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2023.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2023'}},
   'geometry': {'type': 'Point', 'coordinates': [166.9675, -22.269167, 298]},
   'collection': 'MTO-1H',
   'properties': {'title': 'Data from the GORO_ANCIENNE_PEPINIERE weather station - 1H',
    'network': 'ETENDU',
    'platform': 'GORO_ANCIENNE_PEPINIERE',
    'providers': [{'name': 'METEO-FRANCE', 'roles': ['producer']},
     {'url': 'https://www.aeris-data.fr',
      'name': 'AERIS',
      'roles': ['processor', 'host']}],
    'stationId': '98832101',
    'end_datetime': '2025-01-09T00:00:00Z',
    'start_datetime': '2004-01-01T00:00:00Z',
    'acknowledgement': 'The authors would like to acknowledge Meteo-France for providing the standard meteorological variables used in this study, and the French national center for Atmospheric data and services AERIS for granting access to the data.'},
   'stac_version': '1.0.0',
   'stac_extensions': []},
  {'id': '98832005-1H',
   'bbox': [166.6805, -21.984, 166.6805, -21.984],
   'type': 'Feature',
   'links': [{'rel': 'collection',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'parent',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'root',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'self',
     'type': 'application/geo+json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H/items/98832005-1H'}],
   'assets': {'ncss': {'href': 'https://aeris-recette.ipsl.fr/thredds/ncss/point/MTO-1H/OUINNE-1H.ncml/dataset.html',
     'type': 'text/html',
     'roles': ['service'],
     'title': 'NetCDF Subset Service'},
    '98832005-1H.ncml': {'href': 'https://aeris-recette.ipsl.fr/stac/NCML//MTO-1H/OUINNE-1H.ncml',
     'type': 'application/xml',
     'roles': ['data'],
     'title': 'NCML aggregation'},
    '98832005_OUINNE_MTO_1H_2021.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2021/98832005_OUINNE_MTO_1H_2021.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2021'},
    '98832005_OUINNE_MTO_1H_2022.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2022/98832005_OUINNE_MTO_1H_2022.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2022'},
    '98832005_OUINNE_MTO_1H_2023.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2023/98832005_OUINNE_MTO_1H_2023.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2023'}},
   'geometry': {'type': 'Point', 'coordinates': [166.6805, -21.984, 54]},
   'collection': 'MTO-1H',
   'properties': {'title': 'Data from the OUINNE weather station - 1H',
    'network': 'ETENDU',
    'platform': 'OUINNE',
    'providers': [{'name': 'METEO-FRANCE', 'roles': ['producer']},
     {'url': 'https://www.aeris-data.fr',
      'name': 'AERIS',
      'roles': ['processor', 'host']}],
    'stationId': '98832005',
    'end_datetime': '2025-01-09T00:00:00Z',
    'start_datetime': '2004-01-01T00:00:00Z',
    'acknowledgement': 'The authors would like to acknowledge Meteo-France for providing the standard meteorological variables used in this study, and the French national center for Atmospheric data and services AERIS for granting access to the data.'},
   'stac_version': '1.0.0',
   'stac_extensions': []},
  {'id': '98831001-1H',
   'bbox': [164.6875, -20.950167, 164.6875, -20.950167],
   'type': 'Feature',
   'links': [{'rel': 'collection',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'parent',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'root',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'self',
     'type': 'application/geo+json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H/items/98831001-1H'}],
   'assets': {'ncss': {'href': 'https://aeris-recette.ipsl.fr/thredds/ncss/point/MTO-1H/VOH-1H.ncml/dataset.html',
     'type': 'text/html',
     'roles': ['service'],
     'title': 'NetCDF Subset Service'},
    '98831001-1H.ncml': {'href': 'https://aeris-recette.ipsl.fr/stac/NCML//MTO-1H/VOH-1H.ncml',
     'type': 'application/xml',
     'roles': ['data'],
     'title': 'NCML aggregation'},
    '98831001_VOH_MTO_1H_2019.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2019/98831001_VOH_MTO_1H_2019.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2019'},
    '98831001_VOH_MTO_1H_2020.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2020/98831001_VOH_MTO_1H_2020.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2020'},
    '98831001_VOH_MTO_1H_2021.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2021/98831001_VOH_MTO_1H_2021.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2021'},
    '98831001_VOH_MTO_1H_2022.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2022/98831001_VOH_MTO_1H_2022.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2022'},
    '98831001_VOH_MTO_1H_2023.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2023/98831001_VOH_MTO_1H_2023.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2023'}},
   'geometry': {'type': 'Point', 'coordinates': [164.6875, -20.950167, 6]},
   'collection': 'MTO-1H',
   'properties': {'title': 'Data from the VOH weather station - 1H',
    'network': 'ETENDU',
    'platform': 'VOH',
    'providers': [{'name': 'METEO-FRANCE', 'roles': ['producer']},
     {'url': 'https://www.aeris-data.fr',
      'name': 'AERIS',
      'roles': ['processor', 'host']}],
    'stationId': '98831001',
    'end_datetime': '2025-01-09T00:00:00Z',
    'start_datetime': '2004-01-01T00:00:00Z',
    'acknowledgement': 'The authors would like to acknowledge Meteo-France for providing the standard meteorological variables used in this study, and the French national center for Atmospheric data and services AERIS for granting access to the data.'},
   'stac_version': '1.0.0',
   'stac_extensions': []},
  {'id': '98830003-1H',
   'bbox': [165.217833, -20.899167, 165.217833, -20.899167],
   'type': 'Feature',
   'links': [{'rel': 'collection',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'parent',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'root',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'self',
     'type': 'application/geo+json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H/items/98830003-1H'}],
   'assets': {'ncss': {'href': 'https://aeris-recette.ipsl.fr/thredds/ncss/point/MTO-1H/TIWAKA-1H.ncml/dataset.html',
     'type': 'text/html',
     'roles': ['service'],
     'title': 'NetCDF Subset Service'},
    '98830003-1H.ncml': {'href': 'https://aeris-recette.ipsl.fr/stac/NCML//MTO-1H/TIWAKA-1H.ncml',
     'type': 'application/xml',
     'roles': ['data'],
     'title': 'NCML aggregation'},
    '98830003_TIWAKA_MTO_1H_2020.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2020/98830003_TIWAKA_MTO_1H_2020.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2020'},
    '98830003_TIWAKA_MTO_1H_2021.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2021/98830003_TIWAKA_MTO_1H_2021.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2021'},
    '98830003_TIWAKA_MTO_1H_2022.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2022/98830003_TIWAKA_MTO_1H_2022.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2022'},
    '98830003_TIWAKA_MTO_1H_2023.nc': {'href': 'https://thredds-su.ipsl.fr/thredds/fileServer/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2023/98830003_TIWAKA_MTO_1H_2023.nc',
     'type': 'application/netcdf',
     'roles': ['data'],
     'title': '2023'}},
   'geometry': {'type': 'Point', 'coordinates': [165.217833, -20.899167, 14]},
   'collection': 'MTO-1H',
   'properties': {'title': 'Data from the TIWAKA weather station - 1H',
    'network': 'ETENDU',
    'platform': 'TIWAKA',
    'providers': [{'name': 'METEO-FRANCE', 'roles': ['producer']},
     {'url': 'https://www.aeris-data.fr',
      'name': 'AERIS',
      'roles': ['processor', 'host']}],
    'stationId': '98830003',
    'end_datetime': '2025-01-09T00:00:00Z',
    'start_datetime': '2004-01-01T00:00:00Z',
    'acknowledgement': 'The authors would like to acknowledge Meteo-France for providing the standard meteorological variables used in this study, and the French national center for Atmospheric data and services AERIS for granting access to the data.'},
   'stac_version': '1.0.0',
   'stac_extensions': []}]}
ds_cat_aeris= xr.open_dataset('https://thredds-su.ipsl.fr/thredds/dodsC/aeris_thredds/actrisfr_data/665029c8-82b8-4754-9ff4-d558e640b0ba/2010/98832101_GORO_ANCIENNE_PEPINIERE_MTO_1H_2010.nc')
ds_cat_aeris
<xarray.Dataset> Size: 23kB
Dimensions:          (time: 202)
Coordinates:
  * time             (time) datetime64[ns] 2kB 2010-12-23T14:00:00 ... 2010-1...
    station_name     |S64 64B ...
    lon              float32 4B ...
    lat              float32 4B ...
    alt              float32 4B ...
Data variables: (12/26)
    td               (time) float32 808B ...
    ta               (time) float32 808B ...
    ta_max           (time) float32 808B ...
    ta_min           (time) float32 808B ...
    rh               (time) float32 808B ...
    rh_max           (time) float32 808B ...
    ...               ...
    snow_height      (time) float32 808B ...
    nebulosity       (time) float32 808B ...
    insolh_duration  (time) float32 808B ...
    glo              (time) float32 808B ...
    pres             (time) float32 808B ...
    pres_sl          (time) float32 808B ...
Attributes: (12/51)
    title:                           Ground meteorological data from GORO_ANC...
    summary:                         This dataset contains meteorological dat...
    keywords:                        GCMD:EARTH SCIENCE,GCMD:ATMOSPHERE,GCMD:...
    institution:                     Meteo-France
    source:                          Meteo-France operational weather station...
    comment:                         Source data retrieved from the Meteo-Fra...
    ...                              ...
    instrument_vocabulary:           GCMD:GCMD Keywords
    cdm_data_type:                   station
    DODS.strlen:                     23
    DODS.dimName:                    strlen
    DODS_EXTRA.Unlimited_Dimension:  time
    EXTRA_DIMENSION.nv:              2
cat.get_links('child')
[<Link rel=child target=https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H>,
 <Link rel=child target=https://aeris-recette.ipsl.fr/stac-api/collections/MTO-6MIN>]
from typing import Optional, List, Dict, Any
def search_items(
        self,
        collections: Optional[List[str]] = None,
        bbox: Optional[List[float]] = None,
        datetime_range: Optional[str] = None,
        limit: Optional[int] = None,
        max_items: Optional[int] = None,
        query: Optional[Dict[str, Any]] = None
    ) -> List[Dict[str, Any]]:
        """
        Recherche des items dans le catalogue STAC

        Args:
            collections: Liste des IDs de collections (ex: ['MTO-1H', 'MTO-6MIN'])
            bbox: Bounding box [min_lon, min_lat, max_lon, max_lat]
            datetime_range: Intervalle temporel (ex: '2024-01-01T00:00:00Z/2024-01-31T23:59:59Z')
            limit: Nombre d'items par page
            max_items: Nombre maximum d'items à récupérer (None = tous)
            query: Filtres additionnels (CQL2)

        Returns:
            Liste des items trouvés (sous forme de dictionnaires)
        """
        search_params = {}

        if collections:
            search_params["collections"] = collections

        if bbox:
            search_params["bbox"] = bbox

        if datetime_range:
            search_params["datetime"] = datetime_range

        if limit:
            search_params["limit"] = limit

        if max_items:
            search_params["max_items"] = max_items

        if query:
            search_params["query"] = query

        print(f"Paramètres de recherche: {search_params}")

        # Effectuer la recherche
        search = self.client.search(**search_params)

        # Récupérer tous les items
        items = []
        page = 1

        try:
            item_collection = search.item_collection()
            total = len(item_collection)
            print(f"Récupération de {total} items...")

            for item in item_collection:
                items.append(item.to_dict())

        except Exception as e:
            # Fallback: itérer manuellement
            print(f"Utilisation de l'itération manuelle...")
            for i, item in enumerate(search.items(), 1):
                items.append(item.to_dict())
                if i % 100 == 0:
                    print(f"  -> {i} items récupérés...")
                if max_items and i >= max_items:
                    break

        print(f"Total: {len(items)} items trouvés")
        return items
cat
import requests
r = requests.get(url_stac+'/collections')
print(r)
<Response [200]>
r.json()
{'collections': [{'id': 'MTO-1H',
   'type': 'Collection',
   'links': [{'rel': 'items',
     'type': 'application/geo+json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H/items'},
    {'rel': 'parent',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'root',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'self',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-1H'},
    {'rel': 'license',
     'href': 'https://www.etalab.gouv.fr/wp-content/uploads/2014/05/Licence_Ouverte.pdf',
     'type': 'application/pdf',
     'title': "Licence Ouverte d'Etalab"}],
   'title': 'METEO-FRANCE, Hourly data from ground-based stations (RADOME and extended network)',
   'assets': {'stations': {'href': 'https://aeris-recette.ipsl.fr/stac/assets/listeStations_Metro-OM_PackRadome.csv',
     'type': 'text/csv',
     'roles': ['metadata'],
     'title': 'Stations list'},
    'catalogue': {'href': 'https://www.aeris-data.fr/catalogue/?uuid=665029c8-82b8-4754-9ff4-d558e640b0ba',
     'type': 'text/html',
     'roles': ['metadata'],
     'title': 'AERIS catalogue'},
    'thumbnail': {'href': 'https://aeris-recette.ipsl.fr/stac/assets/anemometer-3977718_1280.jpg',
     'type': 'image/jpeg',
     'roles': ['thumbnail']},
    'json_aeris': {'href': 'https://api.sedoo.fr/aeris-catalogue-prod/metadata/665029c8-82b8-4754-9ff4-d558e640b0ba',
     'type': 'application/json',
     'roles': ['metadata'],
     'title': 'AERIS metadata'},
    'stations_geojson': {'href': 'https://aeris-recette.ipsl.fr/stac/MTO-1H/stations.json',
     'type': 'application/geo+json',
     'roles': ['metadata'],
     'title': 'Stations list'}},
   'extent': {'spatial': {'bbox': [[-178.121,
       -46.4325,
       167.884333,
       51.055833]]},
    'temporal': {'interval': [['2004-01-01T00:00:00Z',
       '2025-01-09T00:00:00Z']]}},
   'license': 'proprietary',
   'keywords': ['Atmospheric pressure',
    'Atmospheric temperature',
    'Dew point temperature',
    'Insolation',
    'Precipitation',
    'Relative humidity',
    'Shortwave flux',
    'Soil state',
    'Soil temperature',
    'Surface snow thickness',
    'Total nebulosity',
    'Visibility',
    'Wind direction',
    'Wind speed'],
   'providers': [{'name': 'METEO-FRANCE', 'roles': ['producer']},
    {'url': 'https://www.aeris-data.fr',
     'name': 'AERIS',
     'roles': ['processor', 'host']}],
   'description': 'Data measured at automatic stations in the French network with hourly time steps. Basic parameters (temperature, humidity, wind direction and force, precipitation) and additional parameters depending on instrumentation (ground temperature, visibility, ground conditions, insolation, global radiation).',
   'stac_version': '1.0.0'},
  {'id': 'MTO-6MIN',
   'type': 'Collection',
   'links': [{'rel': 'items',
     'type': 'application/geo+json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-6MIN/items'},
    {'rel': 'parent',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'root',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
    {'rel': 'self',
     'type': 'application/json',
     'href': 'https://aeris-recette.ipsl.fr/stac-api/collections/MTO-6MIN'},
    {'rel': 'license',
     'href': 'https://www.etalab.gouv.fr/wp-content/uploads/2014/05/Licence_Ouverte.pdf',
     'type': 'application/pdf',
     'title': "Licence Ouverte d'Etalab"}],
   'title': 'METEO-FRANCE, 6 minutes data from ground-based stations (RADOME and extended network)',
   'assets': {'stations': {'href': 'https://aeris-recette.ipsl.fr/stac/assets/listeStations_Metro-OM_PackRadome.csv',
     'type': 'text/csv',
     'roles': ['metadata'],
     'title': 'Stations list'},
    'catalogue': {'href': 'https://www.aeris-data.fr/catalogue/?uuid=cbe74172-66e4-4e18-b2cc-31ad11ed934d',
     'type': 'text/html',
     'roles': ['metadata'],
     'title': 'AERIS catalogue'},
    'thumbnail': {'href': 'https://aeris-recette.ipsl.fr/stac/assets/anemometer-3977718_1280.jpg',
     'type': 'image/jpeg',
     'roles': ['thumbnail']},
    'json_aeris': {'href': 'https://api.sedoo.fr/aeris-catalogue-prod/metadata/cbe74172-66e4-4e18-b2cc-31ad11ed934d',
     'type': 'application/json',
     'roles': ['metadata'],
     'title': 'AERIS metadata'},
    'stations_geojson': {'href': 'https://aeris-recette.ipsl.fr/stac/MTO-6MIN/stations.json',
     'type': 'application/geo+json',
     'roles': ['metadata'],
     'title': 'Stations list'}},
   'extent': {'spatial': {'bbox': [[-152.8045,
       -27.618333,
       167.884333,
       51.055833]]},
    'temporal': {'interval': [['2004-01-01T00:00:00Z',
       '2025-01-09T00:00:00Z']]}},
   'license': 'proprietary',
   'keywords': ['Atmospheric pressure',
    'Atmospheric temperature',
    'Dew point temperature',
    'Insolation',
    'Precipitation',
    'Relative humidity',
    'Shortwave flux',
    'Soil state',
    'Soil temperature',
    'Surface snow thickness',
    'Total nebulosity',
    'Visibility',
    'Wind direction',
    'Wind speed'],
   'providers': [{'name': 'METEO-FRANCE', 'roles': ['producer']},
    {'url': 'https://www.aeris-data.fr',
     'name': 'AERIS',
     'roles': ['processor', 'host']}],
   'description': 'Data measured at automatic stations in the French network with infra timetable steps (6 minutes). Basic parameters (temperature, humidity, wind direction and force, precipitation) and additional parameters depending on instrumentation (ground temperature, visibility, ground conditions, insolation, global radiation).',
   'stac_version': '1.0.0'}],
 'links': [{'rel': 'root',
   'type': 'application/json',
   'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
  {'rel': 'parent',
   'type': 'application/json',
   'href': 'https://aeris-recette.ipsl.fr/stac-api/'},
  {'rel': 'self',
   'type': 'application/json',
   'href': 'https://aeris-recette.ipsl.fr/stac-api/collections'}]}
url_stac = 'https://ap.icare.univ-lille.fr/colocation/v1/stac'
cat = Client.open(url_stac,)
cat
r = requests.get(url_stac+'/collections')
print(r)
<Response [200]>
stac = Client.open("https://planetarycomputer.microsoft.com/api/stac/v1")
search = stac.search(collections=["sentinel-2-l2a"],max_items=5)
search
<pystac_client.item_search.ItemSearch at 0x7f63c8f4b6b0>
items = list(search.items())
items
[<Item id=S2C_MSIL2A_20251119T094321_R036_T34UFC_20251119T113511>,
 <Item id=S2C_MSIL2A_20251119T094321_R036_T34UFA_20251119T113511>,
 <Item id=S2C_MSIL2A_20251119T094321_R036_T34UCU_20251119T113511>,
 <Item id=S2A_MSIL2A_20251119T090411_R007_T37VDE_20251119T102519>,
 <Item id=S2A_MSIL2A_20251119T090411_R007_T37VDD_20251119T102519>]
url_stac="https://s3.waw3-1.cloudferro.com/mdl-metadata/metadata/catalog.stac.json"
stac = Client.open(url_stac)
stac
/opt/conda/envs/tmp/lib/python3.12/site-packages/pystac_client/client.py:186: NoConformsTo: Server does not advertise any conformance classes.
  warnings.warn(NoConformsTo())
stac.collection_search()
/opt/conda/envs/tmp/lib/python3.12/site-packages/pystac_client/client.py:787: MissingLink: No link with rel='data' could be found on this Client.
  href = self._get_href("data", data_link, "collections")
<pystac_client.collection_search.CollectionSearch at 0x7f63d24fd6d0>