Class StreamingRenderer

  • All Implemented Interfaces:
    GTRenderer

    public class StreamingRenderer
    extends Object
    implements GTRenderer
    A streaming implementation of the GTRenderer interface.
    • Uses as little memory as possible by processing features as they come from the data source, instead of accumulating them up-front
    Use this class if you need a stateless renderer that provides low memory footprint and decent rendering performance on the first call but don't need good optimal performance on subsequent calls on the same data.

    The streaming renderer is not thread safe

    Author:
    James Macgill, dblasby, jessie eichar, Simone Giannecchini, Andrea Aime, Alessio Fabiani
    • Field Detail

      • SCALE_ACCURATE

        public static final String SCALE_ACCURATE
        Computes the scale as the ratio between map distances and real world distances, assuming 90dpi and taking into consideration projection deformations and actual earth shape.
        Use this method only when in need of accurate computation. Will break if the data extent is outside of the currenct projection definition area.
        See Also:
        Constant Field Values
      • SCALE_OGC

        public static final String SCALE_OGC
        Very simple and lenient scale computation method that conforms to the OGC SLD specification 1.0, page 26.
        This method is quite approximative, but should never break and ensure constant scale even on lat/lon unprojected maps (because in that case scale is computed as if the area was along the equator no matter what the real position is).
        See Also:
        Constant Field Values
      • RENDERING_BUFFER

        public static final String RENDERING_BUFFER
        The rendering buffer grows the query area to account for features that are contributing to the requested area due to their large symbolizer, or long label
        See Also:
        Constant Field Values
      • filterFactory

        protected static final FilterFactory filterFactory
        Filter factory for creating bounding box filters
      • STYLE_FACTORY

        protected static final StyleFactory STYLE_FACTORY
      • scaleDenominator

        protected double scaleDenominator
        The ratio required to scale the features to be rendered so that they fit into the output space.
      • painter

        protected StyledShapePainter painter
        The painter class we use to depict shapes onto the screen
      • TEXT_RENDERING_STRING

        public static final String TEXT_RENDERING_STRING
        Text will be rendered using the usual calls gc.drawString/drawGlyphVector. This is a little faster, and more consistent with how the platform renders the text in other applications. The downside is that on most platform the label and its eventual halo are not properly centered.
      • TEXT_RENDERING_OUTLINE

        public static final String TEXT_RENDERING_OUTLINE
        Text will be rendered using the associated GlyphVector outline, that is, a Shape. This ensures perfect centering between the text and the halo, but introduces more text aliasing.
      • TEXT_RENDERING_ADAPTIVE

        public static final String TEXT_RENDERING_ADAPTIVE
        Will use STRING mode for horizontal labels, OUTLINE mode for all other labels. Works best when coupled with RenderingHints.VALUE_FRACTIONALMETRICS_ON
      • TEXT_RENDERING_KEY

        public static final String TEXT_RENDERING_KEY
        The text rendering method, either TEXT_RENDERING_OUTLINE or TEXT_RENDERING_STRING
        See Also:
        Constant Field Values
      • LINE_WIDTH_OPTIMIZATION_KEY

        public static final String LINE_WIDTH_OPTIMIZATION_KEY
        Whether the thin line width optimization should be used, or not.

        When rendering non antialiased lines adopting a width of 0 makes the java2d renderer get into a fast path that generates the same output as a 1 pixel wide line

        Unfortunately for antialiased rendering that optimization does not help, and disallows controlling the width of thin lines. It is provided as an explicit option as the optimization has been hard coded for years, removing it when antialiasing is on by default will invalidate lots of existing styles (making lines appear thicker).

        See Also:
        Constant Field Values
      • OPTIMIZE_FTS_RENDERING_KEY

        public static final String OPTIMIZE_FTS_RENDERING_KEY
        Boolean flag controlling a memory/speed trade off related to how multiple feature type styles are rendered.

        When enabled (by default) multiple feature type styles against the same data source will be rendered in separate memory back buffers in a way that allows the source to be scanned only once (each back buffer is as big as the image being rendered).

        When disabled no memory back buffers will be used but the feature source will be scanned once for every feature type style declared against it

        See Also:
        Constant Field Values
      • ADVANCED_PROJECTION_HANDLING_KEY

        public static final String ADVANCED_PROJECTION_HANDLING_KEY
        Enables advanced reprojection handling. Geometries will be sliced to fit into the area of definition of the rendering projection.
        See Also:
        Constant Field Values
      • CONTINUOUS_MAP_WRAPPING

        public static final String CONTINUOUS_MAP_WRAPPING
        Enabled continuous cartographic wrapping for projections that can wrap around their edges (e.g., Mercator): this results in a continous horizontal map much like Google Maps
        See Also:
        Constant Field Values
      • ADVANCED_PROJECTION_DENSIFICATION_KEY

        public static final String ADVANCED_PROJECTION_DENSIFICATION_KEY
        Boolean flag indicating whether advanced projection densification should be used when needed.
        See Also:
        Constant Field Values
      • ADVANCED_PROJECTION_DENSIFICATION_TOLERANCE_KEY

        public static final String ADVANCED_PROJECTION_DENSIFICATION_TOLERANCE_KEY
        Densification Tolerance, to be used when densification is enabled.
        See Also:
        Constant Field Values
      • DATELINE_WRAPPING_HEURISTIC_KEY

        public static final String DATELINE_WRAPPING_HEURISTIC_KEY
        Boolean flag indicating whether advanced projection wrapping heuristic should be used or nto.
        See Also:
        Constant Field Values
      • FORCE_EPSG_AXIS_ORDER_KEY

        public static final String FORCE_EPSG_AXIS_ORDER_KEY
        See Also:
        Constant Field Values
      • DECLARED_SCALE_DENOM_KEY

        public static final String DECLARED_SCALE_DENOM_KEY
        See Also:
        Constant Field Values
      • SCALE_COMPUTATION_METHOD_KEY

        public static final String SCALE_COMPUTATION_METHOD_KEY
        See Also:
        Constant Field Values
      • BYLAYER_INTERPOLATION

        public static final String BYLAYER_INTERPOLATION
        See Also:
        Constant Field Values
    • Constructor Detail

      • StreamingRenderer

        public StreamingRenderer()
        Creates a new instance of LiteRenderer without a context. Use it only to gain access to utility methods of this class or if you want to render random feature collections instead of using the map context interface
    • Method Detail

      • setThreadPool

        public void setThreadPool​(ExecutorService threadPool)
        Sets a thread pool to be used in parallel rendering
      • setConcatTransforms

        public void setConcatTransforms​(boolean flag)
        Sets the flag which controls behaviour for applying affine transformation to the graphics object.
        Parameters:
        flag - If true then the transform will be concatenated to the existing transform. If false it will be replaced.
      • getConcatTransforms

        public boolean getConcatTransforms()
        Flag which controls behaviour for applying affine transformation to the graphics object.
        Returns:
        a boolean flag. If true then the transform will be concatenated to the existing transform. If false it will be replaced.
      • addRenderListener

        public void addRenderListener​(RenderListener listener)
        adds a listener that responds to error events of feature rendered events.
        Specified by:
        addRenderListener in interface GTRenderer
        Parameters:
        listener - the listener to add.
        See Also:
        RenderListener
      • stopRendering

        public void stopRendering()
        If you call this method from another thread than the one that called paint or render the rendering will be forcefully stopped before termination
        Specified by:
        stopRendering in interface GTRenderer
      • paint

        public void paint​(Graphics2D graphics,
                          Rectangle paintArea,
                          AffineTransform worldToScreen)
        Renders features based on the map layers and their styles as specified in the map context using setContext.

        This version of the method assumes that the size of the output area and the transformation from coordinates to pixels are known. The latter determines the map scale. The viewport (the visible part of the map) will be calculated internally.

        Specified by:
        paint in interface GTRenderer
        Parameters:
        graphics - The graphics object to draw to.
        paintArea - The size of the output area in output units (eg: pixels).
        worldToScreen - A transform which converts World coordinates to Screen coordinates.
        TODO:
        Need to check if the Layer CoordinateSystem is different to the BoundingBox rendering CoordinateSystem and if so, then transform the coordinates.
      • paint

        public void paint​(Graphics2D graphics,
                          Rectangle paintArea,
                          Envelope mapArea)
        Renders features based on the map layers and their styles as specified in the map context using setContext.

        This version of the method assumes that the area of the visible part of the map and the size of the output area are known. The transform between the two is calculated internally.

        Specified by:
        paint in interface GTRenderer
        Parameters:
        graphics - The graphics object to draw to.
        paintArea - The size of the output area in output units (eg: pixels).
        mapArea - the map's visible area (viewport) in map coordinates.
      • paint

        public void paint​(Graphics2D graphics,
                          Rectangle paintArea,
                          ReferencedEnvelope mapArea)
        Renders features based on the map layers and their styles as specified in the map context using setContext.

        This version of the method assumes that the area of the visible part of the map and the size of the output area are known. The transform between the two is calculated internally.

        Specified by:
        paint in interface GTRenderer
        Parameters:
        graphics - The graphics object to draw to.
        paintArea - The size of the output area in output units (eg: pixels).
        mapArea - the map's visible area (viewport) in map coordinates.
      • paint

        public void paint​(Graphics2D graphics,
                          Rectangle paintArea,
                          Envelope mapArea,
                          AffineTransform worldToScreen)
        Renders features based on the map layers and their styles as specified in the map context using setContext.

        This version of the method assumes that paint area, envelope and worldToScreen transform are already computed. Use this method to avoid recomputation. Note however that no check is performed that they are really in sync!

        Specified by:
        paint in interface GTRenderer
        Parameters:
        graphics - The graphics object to draw to.
        paintArea - The size of the output area in output units (eg: pixels).
        mapArea - the map's visible area (viewport) in map coordinates.
        worldToScreen - A transform which converts World coordinates to Screen coordinates.
      • paint

        public void paint​(Graphics2D graphics,
                          Rectangle paintArea,
                          ReferencedEnvelope mapArea,
                          AffineTransform worldToScreen)
        Renders features based on the map layers and their styles as specified in the map context using setContext.

        This version of the method assumes that paint area, envelope and worldToScreen transform are already computed. Use this method to avoid recomputation. Note however that no check is performed that they are really in sync!

        Specified by:
        paint in interface GTRenderer
        Parameters:
        graphics - The graphics object to draw to.
        paintArea - The size of the output area in output units (eg: pixels).
        mapArea - the map's visible area (viewport) in map coordinates. Its associate CRS is ALWAYS 2D
        worldToScreen - A transform which converts World coordinates to Screen coordinates.
      • fillBackground

        protected void fillBackground​(Graphics2D graphics,
                                      Rectangle paintArea,
                                      Style style)
      • getRequestsQueue

        protected BlockingQueue<StreamingRenderer.RenderingRequest> getRequestsQueue()
        Builds the blocking queue used to bridge between the data loading thread and the painting one
      • getMaxBackBufferMemory

        public int getMaxBackBufferMemory​(int width,
                                          int height)
        When drawing in optimized mode a 32bit surface is created for each FeatureTypeStyle other than the first in order to draw features in parallel while respecting the feature draw ordering multiple FTS impose. This method allows to estimate how many megabytes will be needed, in terms of back buffers, to draw the current MapContent, assuming the feature type style optimizations are turned on (in the case they are off, no extra memory will be used).
        Parameters:
        width - the image width
        height - the image height
      • isInteractive

        public boolean isInteractive()
        Getter for property interactive.
        Returns:
        Value of property interactive.
      • setInteractive

        public void setInteractive​(boolean interactive)
        Sets the interactive status of the renderer. An interactive renderer won't wait for long image loading, preferring an alternative mark instead
        Parameters:
        interactive - new value for the interactive property
      • getGeneralizationDistance

        public double getGeneralizationDistance()
        Returns the generalization distance in the screen space.
      • setGeneralizationDistance

        public void setGeneralizationDistance​(double d)
        Sets the generalizazion distance in the screen space.

        Default value is 0.8, meaning that two subsequent points are collapsed to one if their on screen distance is less than one pixel

        Set the distance to 0 if you don't want any kind of generalization

      • setJava2DHints

        public void setJava2DHints​(RenderingHints hints)
        Description copied from interface: GTRenderer
        Hints used to configure Java2D Graphics prior to rendering.
        Specified by:
        setJava2DHints in interface GTRenderer
      • getJava2DHints

        public RenderingHints getJava2DHints()
        Description copied from interface: GTRenderer
        Hints used to configure Java2D Graphics prior to rendering.
        Specified by:
        getJava2DHints in interface GTRenderer
        Returns:
        Hints
      • setRendererHints

        public void setRendererHints​(Map<?,​?> hints)
        Description copied from interface: GTRenderer
        Hints used to configure rendering process.
        Specified by:
        setRendererHints in interface GTRenderer
      • getRendererHints

        public Map<Object,​Object> getRendererHints()
        Description copied from interface: GTRenderer
        Hints used to configure rendering process
        Specified by:
        getRendererHints in interface GTRenderer
        Returns:
        Hints used to configure rendering process
      • setMapContent

        public void setMapContent​(MapContent mapContent)
        Description copied from interface: GTRenderer
        Sets the MapContent which contains the data to be rendered.
        Specified by:
        setMapContent in interface GTRenderer
        Parameters:
        mapContent - the map content
      • getMapContent

        public MapContent getMapContent()
        Description copied from interface: GTRenderer
        Gets the MapContent instance which contains the data being rendered.
        Specified by:
        getMapContent in interface GTRenderer
        Returns:
        the MapContent instance
      • isCanTransform

        public boolean isCanTransform()