uataq.Network.get_obs#

Network.get_obs(time_range=None, num_processes=1)[source]#

Get observations for the network across all sites.

Combines data from all sites into a single GeoDataFrame with spatial coordinates, reading the highest data level each instrument has. That is final, as get_obs() reads, except at a horel vehicle with no finalized files at all, which is read at raw (see Which level a read gives). For stationary sites, coordinates are repeated for each timestamp. For mobile sites, coordinates vary with GPS data.

This method is optimized for the common case of combining data from multiple sites for one pollutant at the final data level. For complex custom filtering (e.g., reading from multiple instruments at different levels, applying custom QAQC flags), use the lower-level Site.read_data() API directly.

Parameters:
Returns:

A GeoDataFrame with the following structure:

  • Index: Time_UTC (datetime)

  • Columns: SID, instrument, [pollutant columns], Latitude_deg, Longitude_deg, zagl, geometry (mobile sites also carry the GPS motion columns)

  • CRS: EPSG:4326

Pollutant columns are those concentration_columns() matches with raw=True: e.g. CO2d_ppm_cal and CO2d_ppm_raw. Instruments at one site are stacked as rows, labeled by instrument.

Return type:

GeoDataFrame

Notes

Which of _cal / _raw holds the usable value is not uniform. TRX01’s lgr_ugga is tank-calibrated (_cal; _raw is uncalibrated), but lgr_ugga_manual_cal (from 2023-11-18, and again from 2024-08-27) has _cal empty and the LGR-software calibrated value in _raw. Choose per instrument.

Raises:

ReaderError – If no data is found for any site.

Warns:

EmptyResultWarning – If the sites have files for the range but the table has no rows.