neoserver exposes published raster coverages at:
/workspaces/{workspace}/wcs
The endpoint implements WCS 2.1 core and preserves WCS 2.0.1 compatibility. GetCapabilities, DescribeCoverage, and GetCoverage use the GET/KVP binding by default. Optional protocol features are advertised only after they are enabled in the workspace WCS settings, so the existing WCS 2.0 core conformance profile remains stable.
Raster sources
rasterfilepublishes GeoTIFF/COG, CF-NetCDF, and GRIB2 sources. NetCDF and GRIB arrays are discovered through GDAL’s multidimensional API, including numeric range metadata and regular or irregular spatial, time, elevation, and other coordinate axes.connection_info.variablesrestricts publication to named arrays andopen_optionspasses explicit GDAL driver options.postgisdiscovers regular PostGIS raster grids throughraster_columns. Sources require a non-zero SRID and resolution, consistent alignment/bands, and no skew.raster_mosaiccombines allowlisted GeoTIFF/COG granules. Explicit or persistently harvested time/elevation values become WCS axes as well as WMS/tile dimensions. A WCS mosaic request must slice each nonspatial axis to one value.
Every local or remote source is checked by Datasource.AllowedPaths. HTTPS files are downloaded through the bounded safe cache. S3 paths use GDAL’s /vsis3/ adapter only after exact bucket allowlisting.
Create a service, discover its arrays, and publish one coverage:
curl -X POST http://localhost:9000/api/v1/workspaces/demo/services \
-H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' \
-d '{"name":"climate","type":"rasterfile","connection_info":{"path":"./data/climate.nc","variables":["/temperature"]}}'
curl -X POST http://localhost:9000/api/v1/workspaces/demo/services/climate/discover-coverages \
-H 'Authorization: Bearer TOKEN'
curl -X POST http://localhost:9000/api/v1/workspaces/demo/services/climate/coverages \
-H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' \
-d '{"source_coverage":"/temperature","public_id":"temperature","enabled":true}'
For multidimensional arrays, publication automatically derives time/elevation dimensions, their source-axis labels, defaults, units, and extents. Explicit dimensions may override that metadata. source_axis distinguishes the source coordinate name from the public time or elevation dimension name.
Coverage publication also accepts wcs20_coverage_subtype with the exact value RectifiedGridCoverage or GridCoverage. It defaults to RectifiedGridCoverage for backward compatibility. The setting controls only the WCS 2.0.1 CIS 1.0 representation: it does not change the source raster, WMS or tile portrayal, or the WCS 2.1 CIS 1.1 representation. Use GridCoverage when the publication intentionally needs the generic grid model; otherwise retain the more specific rectified-grid default.
Workspace capabilities
Enable only the profiles and formats intended for a workspace:
curl -X PUT http://localhost:9000/api/v1/workspaces/demo/settings/wcs \
-H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' \
-d '{
"enabled": true,
"public": true,
"title": "Demo WCS",
"extensions": ["xml-post","range-subsetting","scaling","crs","interpolation","multidimensional"],
"output_formats": ["image/tiff","application/gml+xml","multipart/related","application/netcdf","image/jp2"],
"interpolation_methods": ["nearest-neighbor","linear"],
"allowed_subsetting_crs": ["http://www.opengis.net/def/crs/EPSG/0/4326"],
"allowed_output_crs": ["http://www.opengis.net/def/crs/EPSG/0/4326","http://www.opengis.net/def/crs/EPSG/0/3857"]
}'
Supported extension names are:
xml-post: secureapplication/xmlortext/xmlPOST requests for all three operations. DTDs and XML directives are rejected, and POST is normalized through the same validation/execution path as KVP.range-subsetting: ordered field selection throughRANGESUBSET; intervals preserve the published range-field order.scaling:SCALEFACTOR,SCALEAXES,SCALESIZE, orSCALEEXTENT(mutually exclusive).crs: allowlistedSUBSETTINGCRSandOUTPUTCRStransformation.interpolation: nearest-neighbor or linear interpolation.multidimensional: nonspatial trims and slices over published source axes.
Requests and formats
KVP names are case-insensitive. Spatial and nonspatial subsets may be repeated:
?SERVICE=WCS&VERSION=2.1.0&REQUEST=GetCoverage&COVERAGEID=temperature&FORMAT=image/tiff&SUBSET=lon(7,9)&SUBSET=lat(50,51)&SUBSET=time("2026-01-01T06:00:00Z")
Extension examples:
&RANGESUBSET=red:blue
&SCALESIZE=lon(1024),lat(512)
&OUTPUTCRS=http://www.opengis.net/def/crs/EPSG/0/3857
&INTERPOLATION=linear
The core formats are image/tiff (default), application/gml+xml, and multipart/related. The multipart representation contains GML metadata referencing a GeoTIFF MIME part. application/netcdf and image/jp2 are available when configured and when the corresponding GDAL driver is present. A retained multidimensional NetCDF subset is encoded with GDAL’s multidimensional translator; GeoTIFF, JPEG 2000, GML, and multipart results require all nonspatial axes to be sliced to a two-dimensional grid.
JPEG2000 numeric exports require homogeneous Byte, Int16, or UInt16 bands. Floating-point, 32-bit integer, unknown, or mixed band types are rejected with an InvalidParameterValue exception for format; use image/tiff to preserve those samples. The server does not silently clamp, round, or rescale unsupported values to UInt16.
Target-grid numeric exports also preserve missing-data validity. TIFF and NetCDF select a representable nodata value that does not collide with valid samples across bands; valid zeroes and extrema remain valid. A declared integer sentinel is retained when safe. If the integer domain has no unused value, the server rejects the encoding instead of hiding valid samples; use a floating-point source for that case. JPEG2000 target-grid exports containing missing samples are rejected with a format exception and a recommendation to use TIFF, because the returned single-file JPEG2000 cannot preserve that validity metadata. All-valid supported integer JPEG2000 exports remain available. These rules also apply to intermediate grids used for reprojection; source files are not modified.
WCS 2.1 descriptions use CIS 1.1 GeneralGridCoverage, enumerating regular and irregular axes and ordered range fields. WCS 2.0.1 responses use the coverage publication’s CIS 1.0 RectifiedGridCoverage or generic GridCoverage representation. Existing two-dimensional sources continue through the original extraction path unless an extension requires target-grid rendering.
Limits and conformance
Process-wide WCS settings cap grid cells, output bytes, dimensions, retained axis values, source granules, temporary bytes, concurrency, queue time, and processing time. Workspace values inherit from and cannot exceed those ceilings. Native multidimensional encoding uses WCS.TemporaryDirectory; generated files are removed after each request.
WCS 2.0.1 and 2.1 are exercised by native black-box protocol integration tests.
WCS 2.1 uses that evidence because no applicable official WCS 2.1 ETS is
published. Stock official WCS 2.0.1 execution covers Core, XML POST, range
subsetting, scaling, and CRS. Interpolation uses the separately identified
official-derived compatibility profile. Run make test-wcs-integration,
make test-conformance-wcs20,
make test-conformance-derived-wcs20-interpolation, or
make test-wcs-extensions for focused source/extension tests. See
Protocol testing and OGC conformance.
Adapted from neoserver’s source documentation . Maintained independently for this website.