[Geoserver-devel] Configuration options for DDS/BIL plugin

I’m working on adding some configuration options to the DDS/BIL plugin, and I’d like to run my plan past the community before going too far down this path. The problem that I’m trying to solve is that the BIL format produced by the plugin does not contain any metadata, so the client must know the data type, byte order, and missing data value in order to correctly interpret the raster. In my case, I am not able to modify the client code, so I would like the server administrator to be able to configure a BIL layer to match the client’s expectations.

I am going to add per-layer configuration UI to allow the server admin to specify BIL parameters. Default behavior will match the current behavior of the BIL plugin. The new UI will appear in the Publishing tab of the Layer Configuration page for raster layers.

Here are the config options and their behavior:

Data type
Provides a default encoding for the BIL output. If the requested mime type implies a data type (e.g application/bil16), then data will be converted (if necessary) to the requested type (this is the current behavior). If the requested mime type is application/bil or image/bil, then data will be converted to the default encoding specified by the server administrator. By default the encoding of the source data will be used (current behavior).

Byte order
The BIL plugin currently produces output in network byte order, and this will remain the default. The server admin may set little endian order in the config panel.

Missing data value
The server admin may specify a missing data value for output BIL files. Missing data values in the source data will be recoded to this value (e.g. recode -32768 as -9999). The purpose of this option is to accommodate clients that assume a certain value for missing data. If the config option is not set then no recoding is performed.

One question: I was able to implement missing data recoding by writing a custom JAI operation. Is there a better way to do this using GeoServer tools? (I want to replace pixels of one value with another value.)

I would welcome any feedback on this proposal. I’m also open to suggestions of other configuration options that might be included, for either BIL or DDS.

Thanks,
Parker