Skip to content

v1.1.0

Choose a tag to compare

@dmarkham dmarkham released this 09 Apr 04:59
· 4 commits to master since this release

v1.1.0

New features

  • NearestValue haversine distance — all grid types now use great-circle distance to pick the closest point, matching the eccodes approach. Correct at grid edges where projection-space rounding fails.
  • O(1) NearestValue for Template 3.1 (rotated lat/lon) — converts target to rotated coordinates, finds 4 surrounding points, picks nearest by haversine. Turns seconds into microseconds on 1.2M point RDPS grids.
  • BilinearValue for Template 3.1 — bilinear interpolation in rotated coordinate space.
  • GridCoordinates canonical ordering — now returns coordinates in the same order as Values(), regardless of scanning mode.
  • Product templates 4.2, 4.11, 4.12 — derived ensemble forecast, ensemble + time interval, derived ensemble + time interval. Covers GEFS/ECMWF ensemble statistics.
  • Grid template 3.90 — Space View / Satellite Perspective (GOES-R, Himawari).
  • SurfaceLevel/SurfaceLevelHPa helpers — handle both GFS-style (raw Pa) and RDPS-style (compact hPa with non-standard scale factors).
  • CMC parameter codes — SkyTransparencyIndex (0,19,38) and SeeingIndex (0,19,39).
  • Fuzz tests — 9 fuzz targets covering all parsers (j2k, aec, complex, run-length, message, JPEG2000, CCSDS, simple, PNG).
  • Hardened against malformed input — bounds-checked extractBits, 100M allocation caps, iteration limits on state machines, 256MB section size limit.

Bug fixes

  • NearestValue returned wrong index for rotated grids with non-zero scanning mode (row inversion)
  • GridCoordinates returned raw scanning order instead of canonical order
  • SurfaceLevelHPa double-division for RDPS isobaric encoding
  • pixelToUint negative shift panic when bits > 16
  • Template330 longitude fields now correctly use sign-magnitude encoding
  • gridScanParams now handles Template390
  • Section0 reserved bytes preserved on round-trip
  • WriteMessage patches TotalLength after writing
  • Scale factor fields for surfaces changed to signed int8

Testing

  • 294 tests, 0 failures
  • Exhaustive brute-force agreement tests for NearestValue (59 points on rotated grids, 10 Canadian cities on real RDPS data)
  • Cross-validated against eccodes 2.47.0