Python interface to the ecCodes GRIB and BUFR decoder/encoder library for meteorological data processing
—
Advanced operations for working with meteorological data grids, coordinate systems, and spatial data. Includes data access, nearest neighbor searches, grid transformations, and specialized GRIB/BUFR data operations.
Core functions for reading and writing meteorological data values.
def codes_get_values(msgid):
"""
Get all data values from message.
Parameters:
- msgid (int): Message handle ID
Returns:
list[float]: All data values as float array
"""
def codes_set_values(msgid, values):
"""
Set all data values in message.
Parameters:
- msgid (int): Message handle ID
- values (list[float]): Data values to set
"""
def codes_grib_get_data(gribid):
"""
Get data with coordinates.
Parameters:
- gribid (int): GRIB message handle ID
Returns:
tuple: (latitudes, longitudes, values) arrays
"""Find nearest grid points and perform spatial queries.
def codes_grib_find_nearest(gribid, lat, lon):
"""
Find nearest grid point to coordinates.
Parameters:
- gribid (int): GRIB message handle ID
- lat (float): Latitude in degrees
- lon (float): Longitude in degrees
Returns:
tuple: (nearest_lat, nearest_lon, value, distance, index)
"""
def codes_grib_find_nearest_multiple(gribid, lats, lons):
"""
Find nearest points for multiple coordinates.
Parameters:
- gribid (int): GRIB message handle ID
- lats (list[float]): Latitude coordinates
- lons (list[float]): Longitude coordinates
Returns:
list[tuple]: Results for each coordinate pair
"""Access grid geometry and coordinate system information.
def codes_grib_get_grid_info(gribid):
"""
Get comprehensive grid information.
Parameters:
- gribid (int): GRIB message handle ID
Returns:
dict: Grid metadata and geometry
"""import eccodes
import numpy as np
with open('temperature.grib', 'rb') as f:
msg = eccodes.codes_grib_new_from_file(f)
# Get all data values
values = eccodes.codes_get_values(msg)
print(f"Data range: {min(values):.2f} to {max(values):.2f}")
# Get coordinates and data together
lats, lons, data = eccodes.codes_grib_get_data(msg)
# Convert to numpy arrays for analysis
temp_data = np.array(data) - 273.15 # Convert K to °C
latitudes = np.array(lats)
longitudes = np.array(lons)
print(f"Temperature range: {temp_data.min():.1f}°C to {temp_data.max():.1f}°C")
eccodes.codes_release(msg)import eccodes
# Location coordinates (latitude, longitude)
cities = {
'London': (51.5074, -0.1278),
'Paris': (48.8566, 2.3522),
'Berlin': (52.5200, 13.4050)
}
with open('forecast.grib', 'rb') as f:
msg = eccodes.codes_grib_new_from_file(f)
for city, (lat, lon) in cities.items():
nearest = eccodes.codes_grib_find_nearest(msg, lat, lon)
grid_lat, grid_lon, value, distance, index = nearest
print(f"{city}: {value:.2f} (distance: {distance:.2f} km)")
print(f" Grid point: ({grid_lat:.3f}, {grid_lon:.3f})")
eccodes.codes_release(msg)Install with Tessl CLI
npx tessl i tessl/pypi-eccodes