From 6a7b4e33306b6e533540a01785aca201fc0e57f7 Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Thu, 13 Aug 2026 14:46:24 -0300 Subject: [PATCH] PYR1-938 Declare the band on mosaic coverages so GetTimeSeries works geosync creates mosaic coverages with no band metadata, so ncWMS GetTimeSeries failed with an empty property list. Measured on geoserver-dev against hrrr ws, 49 timesteps: GetTimeSeries 1 request 153 ms 1534 bytes GetFeatureInfo x49 49 requests 675 ms Values agree at every timestep. Without a declared band, omitting PROPERTYNAME threw IndexOutOfBoundsException on coverage.getDimensions().get(0): https://github.com/geoserver/geoserver/blob/f8e492cd0fe21c54df4840ea1241f633a440fdd9/src/community/ncwms/src/main/java/org/geoserver/wms/ncwms/NcWmsService.java#L179-L182 Callers passed PROPERTYNAME=GRAY_INDEX to sidestep that. With the band declared the same block resolves the first band on its own: dropping the parameter returns byte-identical CSV, measured over 209 timesteps of gfs0p25 tmpf. --- src/geosync/rest_api.clj | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/geosync/rest_api.clj b/src/geosync/rest_api.clj index f25f52b..d77add8 100644 --- a/src/geosync/rest_api.clj +++ b/src/geosync/rest_api.clj @@ -365,6 +365,22 @@ [:name store] [:nativeName store] [:title store] + ;; Declaring the band is what makes ncWMS GetTimeSeries usable: it reads the + ;; band list to return a whole time series at a point in one request rather + ;; than one request per timestep. Without it the operation fails with an + ;; empty property list. GeoServer never fills the bands in itself here + ;; because the store is created with configure=none. + ;; + ;; Single band, because every forecast raster PyreCast publishes is + ;; single-band, and that is what the plain GeoTIFF path derives on its own. + ;; A multi-band mosaic would need the real band list read off the reader. + [:dimensions + [:coverageDimension + [:name "GRAY_INDEX"] + [:description "GridSampleDimension[-Infinity,Infinity]"] + [:range + [:min "-inf"] + [:max "inf"]]]] [:metadata [:entry {:key "time"} [:dimensionInfo