= FDO RFC 10 - Modify WMS override API to support additional parameters and bit depth variations? = This page contains a request for comments document (RFC) for the FDO Open Source project. More FDO RFCs can be found on the [wiki:FDORfcs RFCs] page. == Status == ||RFC Template Version||(1.0)|| ||Submission Date|||| ||Last Modified||Klain Qin [[Timestamp]]|| ||Author||Klain Qin|| ||RFC Status||Draft|| ||Implementation Status ||Under Development|| ||Proposed Milestone||3.3.0.0|| ||Assigned PSC guide(s)||Greg Boone|| ||'''Voting History'''|| || ||+1|||| ||+0|||| ||-0|||| ||-1|||| == Overview == The purpose is to add support to additional parameters and bit-depth variations to image formats. Currently, WMS Provider supports four image formats: image/png, image/jpg, image/tif, image/gif. They are defined as: {{{ enum FdoWmsOvFormatType{ FdoWmsOvFormatType_Png = 0, FdoWmsOvFormatType_Tif, FdoWmsOvFormatType_Jpg, FdoWmsOvFormatType_Gif }; }}} This enhancement will support additional parameters and bit-depth variations such as: {{{ image/png; PhotometricInterpretation=PaletteColor image/png; PhotometricInterpretation=RGB image/png; mode=24bit }}} == Proposed Solution == WMS Override API will accept a string instead of the enumeration for image format. It will only accept server defined format strings that contain ‘png’, ‘tiff’, ‘jpeg’ or ‘gif’ in their definitions. For example, by calling {{{SetImageFormat("image/png; PhotometricInterpretation=PaletteColor")}}}, WMS Provider will return raster stream in palette model. And by calling {{{SetImageFormat("image/png; PhotometricInterpretation=RGB")}}}, the raster stream will be returned in RGB model. In this way, WMS Provider could fully make use of the server capability to support different bit-depth. These additional parameters will go into the configuration file like: {{{ image/png;PhotometricInterpretation=PaletteColor ... }}} However, still only four image file formats are supported: png, tiff, jpeg, and gif. If the user passed a string that contains other image formats like "bmp", "wbmp", etc, an exception will be thrown. This section outlines the necessary code changes in the unmanaged and managed code. === Unmanaged Code === {{{ /// \brief /// /// The FdoWmsOvRasterDefinition class defines the physical overrides for a raster property in a WMS FDO schema. class FdoWmsOvRasterDefinition : public FdoPhysicalElementMapping { ... /// \brief /// Gets the format type in which the WMS image will be generated. /// /// \remarks /// Allowed map formats are "picture" formats . Picture formats constitute /// a rectangular pixel array of fixed size. Picture formats include file types such /// as Portable Network Graphics (PNG), Joint Photographics Expert Group (JPEG) /// and file types such as Tagged Image File Format (TIFF). /// /// \return /// Returns the WMS image format. /// FDOWMS_API FdoString* GetImageFormat(void) const; /// \brief /// Sets the format type in which the WMS image will be generated. /// /// \remarks /// Allowed map formats are "picture" formats . Picture formats constitute /// a rectangular pixel array of fixed size. Picture formats include file types such /// as Portable Network Graphics (PNG), Joint Photographics Expert Group (JPEG) /// and file types such as Tagged Image File Format (TIFF). /// /// \return /// Returns nothing. /// FDOWMS_API void SetImageFormat(FdoString* value); ... } }}} === Managed Code === {{{ /// /// The FdoWmsOvRasterDefinition class defines the physical overrides for a raster property in a WMS FDO schema. /// public __gc class OvRasterDefinition : public NAMESPACE_OSGEO_FDO_COMMANDS_SCHEMA::PhysicalElementMapping { ... /// Gets the format type in which the WMS image will be generated. /// Returns the WMS format type. /// Allowed map formats are "picture" formats . Picture formats constitute /// a rectangular pixel array of fixed size. Picture formats include file types such /// as Portable Network Graphics (PNG), Joint Photographics Expert Group (JPEG) /// and file types such as Tagged Image File Format (TIFF). __property System::String* get_ImageFormat(); /// Sets the format type in which the WMS image will be generated. /// Returns nothing. /// Allowed map formats are "picture" formats . Picture formats constitute /// a rectangular pixel array of fixed size. Picture formats include file types such /// as Portable Network Graphics (PNG), Joint Photographics Expert Group (JPEG) /// and file types such as Tagged Image File Format (TIFF). __property System::Void set_ImageFormat(System::String* value); ... } }}} == Implications == • The change is backwards compatible with existing config files. Existing config files will be readable by the updated WMS provider. • The change is not forwards compatible. New config files created by the updated provider are not readable by earlier versions of the WMS provider. This is a problem because earlier versions of the WMS override API will do a strict check on parsing ... in the configuration file. It could only recognize "png", "jpg", "Gif", or "tif", as they are hard-coded in the code: {{{ static FdoString* g_WmsImageFormatPng = L"PNG"; static FdoString* g_WmsImageFormatTif = L"TIF"; static FdoString* g_WmsImageFormatJpg = L"JPG"; static FdoString* g_WmsImageFormatGif = L"GIF"; }}} == Test Plan == Existing unit tests will be expanded to test those changes. == Funding/Resources == Autodesk to provide resources / funding to update WMS Override API.