WebMapService development overview
Contents
1. Status
- protocol versions 1.1.1/1.3.0 finished
GetMap/GetFeatureInfo done
- data sources shape/cascading done
- cascading GFI missing
- support for vector based dimensions complete
- support for vector SLD/SE symbology complete
- parsing support for raster SLD/SE complete
NamedLayer/UserStyle SLD requests are working, including filters
2. Design
Here's a quick rundown on the code layers involved, from top (handling of requests) to bottom (actual rendering).
2.1. Front controller, org.deegree.services.controller
The service independent front controller handles all general issues such as SOAP, KVP normalizing and version negotiation. It is mostly complete.
2.2. WMSController, org.deegree.services.controller.wms
The WMSController class handles all protocol stuff. That means request parsing, sending of correct service exceptions, actual sending of images, outputting of GML/HTML etc.
2.3. MapService and Layers, org.deegree.services.wms
This layer takes the request objects from the protocol layer and transforms them into proper responses, such as images (for GetMap) or feature collections (for GetFeatureInfo). It is responsible for fetching the actual data from the data source, and using the renderer to produce the result. The layer classes correspond to data sources. The Layer class currently handles the rendering of vector layers generally, the raster rendering is implemented in the RasterLayer.
2.4. Evaluation of features, org.deegree.rendering.r2d.se.unevaluated
The rendering system can be found in the core module. In order to obtain the components for actual rendering, features have to be evaluated to obtain the styling and the geometry. The se package contains the parsing code to parse SLD/SE, which yields classes that can be used to do this evaluation.
2.5. Rendering, org.deegree.rendering.r2d
Basic vector rendering is already implemented, and can be found in the Java2DRenderer class. Vector rendering works by using an instance of Geometry with an instance of Styling (from the styling package) and rendering them together. The geometries and the styling objects are usually obtained from evaluating instances of Style from the se package.
Basic raster rendering is only partially implemented, and can be found in the Java2DRasterRenderer class. Raster rendering works by using an AbstractRaster and a RasterStyling, and rendering them together. Detailed implementation status of every raster rendering feature is in Raster Rendering Implementation.