Class StreamingRenderer
- All Implemented Interfaces:
GTRenderer
- Uses as little memory as possible by processing features as they come from the data source, instead of accumulating them up-front
The streaming renderer is not thread safe
- Author:
- James Macgill, dblasby, jessie eichar, Simone Giannecchini, Andrea Aime, Alessio Fabiani
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static class
Marks the end of the request flow, instructs the painting thread to exitprotected class
A request to paint a shape with a specific Style2Dprotected static class
protected static class
A request to merge multiple back buffers to the main graphicsprotected class
A request to paint a shape with a specific Style2Dprotected class
A request to render a rasterprotected class
class
A blocking queue subclass with a special behavior for the occasion when the rendering stop has been requested: puts are getting ignored, and take always returns an EndRequestprotected static class
A request sent to the painting threadprotected class
A request to render a rasterstatic class
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final String
Boolean flag indicating whether advanced projection densification should be used when needed.static final String
Densification Tolerance, to be used when densification is enabled.static final String
Enables advanced reprojection handling.static final String
static final String
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 Mapsstatic final String
Boolean flag indicating whether advanced projection wrapping heuristic should be used or nto.static final String
static final String
protected static final FilterFactory
Filter factory for creating bounding box filtersstatic final String
static final String
protected LabelCache
static final String
Whether the thin line width optimization should be used, or not.static final String
Boolean flag controlling a memory/speed trade off related to how multiple feature type styles are rendered.protected StyledShapePainter
The painter class we use to depict shapes onto the screenstatic final String
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 labelstatic final String
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.static final String
static final String
Very simple and lenient scale computation method that conforms to the OGC SLD specification 1.0, page 26.protected double
The ratio required to scale the features to be rendered so that they fit into the output space.protected static final StyleFactory
static final String
Will use STRING mode for horizontal labels, OUTLINE mode for all other labels.static final String
The text rendering method, either TEXT_RENDERING_OUTLINE or TEXT_RENDERING_STRINGstatic final String
Text will be rendered using the associatedGlyphVector
outline, that is, aShape
.static final String
Text will be rendered using the usual calls gc.drawString/drawGlyphVector.static final String
Boolean flag indicating whether vector rendering should be preferred when painting graphic fills. -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new instance of LiteRenderer without a context. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addRenderListener
(RenderListener listener) adds a listener that responds to error events of feature rendered events.protected void
fillBackground
(Graphics2D graphics, Rectangle paintArea, Style style) boolean
Flag which controls behaviour for applying affine transformation to the graphics object.double
Returns the generalization distance in the screen space.Hints used to configure Java2D Graphics prior to rendering.Gets theMapContent
instance which contains the data being rendered.static MathTransform
getMathTransform
(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem destCRS) 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.Hints used to configure rendering processprotected BlockingQueue<StreamingRenderer.RenderingRequest>
Builds the blocking queue used to bridge between the data loading thread and the painting oneboolean
boolean
Getter for property interactive.void
paint
(Graphics2D graphics, Rectangle paintArea, AffineTransform worldToScreen) Renders features based on the map layers and their styles as specified in the map context usingsetContext
.void
paint
(Graphics2D graphics, Rectangle paintArea, ReferencedEnvelope mapArea) Renders features based on the map layers and their styles as specified in the map context usingsetContext
.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 usingsetContext
.void
paint
(Graphics2D graphics, Rectangle paintArea, Envelope mapArea) Renders features based on the map layers and their styles as specified in the map context usingsetContext
.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 usingsetContext
.void
removeRenderListener
(RenderListener listener) Removes a render listener.void
setConcatTransforms
(boolean flag) Sets the flag which controls behaviour for applying affine transformation to the graphics object.void
setGeneralizationDistance
(double d) Sets the generalizazion distance in the screen space.void
setInteractive
(boolean interactive) Sets the interactive status of the renderer.void
setJava2DHints
(RenderingHints hints) Hints used to configure Java2D Graphics prior to rendering.void
setMapContent
(MapContent mapContent) Sets theMapContent
which contains the data to be rendered.void
setRendererHints
(Map<?, ?> hints) Hints used to configure rendering process.void
setThreadPool
(ExecutorService threadPool) Sets a thread pool to be used in parallel renderingvoid
If you call this method from another thread than the one that calledpaint
orrender
the rendering will be forcefully stopped before terminationprotected ReferencedEnvelope
transformEnvelope
(ReferencedEnvelope envelope, CoordinateReferenceSystem crs)
-
Field Details
-
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:
-
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:
-
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:
-
filterFactory
Filter factory for creating bounding box filters -
STYLE_FACTORY
-
scaleDenominator
protected double scaleDenominatorThe ratio required to scale the features to be rendered so that they fit into the output space. -
labelCache
-
painter
The painter class we use to depict shapes onto the screen -
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
Text will be rendered using the associatedGlyphVector
outline, that is, aShape
. This ensures perfect centering between the text and the halo, but introduces more text aliasing. -
TEXT_RENDERING_ADAPTIVE
Will use STRING mode for horizontal labels, OUTLINE mode for all other labels. Works best when coupled withRenderingHints.VALUE_FRACTIONALMETRICS_ON
-
TEXT_RENDERING_KEY
The text rendering method, either TEXT_RENDERING_OUTLINE or TEXT_RENDERING_STRING- See Also:
-
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:
-
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:
-
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:
-
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:
-
VECTOR_RENDERING_KEY
Boolean flag indicating whether vector rendering should be preferred when painting graphic fills. SeeSLDStyleFactory.isVectorRenderingEnabled()
for more details.- See Also:
-
ADVANCED_PROJECTION_DENSIFICATION_KEY
Boolean flag indicating whether advanced projection densification should be used when needed.- See Also:
-
ADVANCED_PROJECTION_DENSIFICATION_TOLERANCE_KEY
Densification Tolerance, to be used when densification is enabled.- See Also:
-
DATELINE_WRAPPING_HEURISTIC_KEY
Boolean flag indicating whether advanced projection wrapping heuristic should be used or nto.- See Also:
-
LABEL_CACHE_KEY
- See Also:
-
FORCE_EPSG_AXIS_ORDER_KEY
- See Also:
-
DPI_KEY
- See Also:
-
DECLARED_SCALE_DENOM_KEY
- See Also:
-
SCALE_COMPUTATION_METHOD_KEY
- See Also:
-
BYLAYER_INTERPOLATION
- See Also:
-
-
Constructor Details
-
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 Details
-
setThreadPool
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
adds a listener that responds to error events of feature rendered events.- Specified by:
addRenderListener
in interfaceGTRenderer
- Parameters:
listener
- the listener to add.- See Also:
-
removeRenderListener
Removes a render listener.- Specified by:
removeRenderListener
in interfaceGTRenderer
- Parameters:
listener
- the listener to remove.- See Also:
-
stopRendering
public void stopRendering()If you call this method from another thread than the one that calledpaint
orrender
the rendering will be forcefully stopped before termination- Specified by:
stopRendering
in interfaceGTRenderer
-
paint
Renders features based on the map layers and their styles as specified in the map context usingsetContext
.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 interfaceGTRenderer
- 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
Renders features based on the map layers and their styles as specified in the map context usingsetContext
.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 interfaceGTRenderer
- 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
Renders features based on the map layers and their styles as specified in the map context usingsetContext
.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 interfaceGTRenderer
- 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 usingsetContext
.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 interfaceGTRenderer
- 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 usingsetContext
.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 interfaceGTRenderer
- 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 2DworldToScreen
- A transform which converts World coordinates to Screen coordinates.
-
fillBackground
-
getRequestsQueue
Builds the blocking queue used to bridge between the data loading thread and the painting one -
transformEnvelope
protected ReferencedEnvelope transformEnvelope(ReferencedEnvelope envelope, CoordinateReferenceSystem crs) throws TransformException, FactoryException - Throws:
TransformException
FactoryException
-
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 currentMapContent
, 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 widthheight
- 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
Description copied from interface:GTRenderer
Hints used to configure Java2D Graphics prior to rendering.- Specified by:
setJava2DHints
in interfaceGTRenderer
-
getJava2DHints
Description copied from interface:GTRenderer
Hints used to configure Java2D Graphics prior to rendering.- Specified by:
getJava2DHints
in interfaceGTRenderer
- Returns:
- Hints
-
setRendererHints
Description copied from interface:GTRenderer
Hints used to configure rendering process.- Specified by:
setRendererHints
in interfaceGTRenderer
-
getRendererHints
Description copied from interface:GTRenderer
Hints used to configure rendering process- Specified by:
getRendererHints
in interfaceGTRenderer
- Returns:
- Hints used to configure rendering process
-
setMapContent
Description copied from interface:GTRenderer
Sets theMapContent
which contains the data to be rendered.- Specified by:
setMapContent
in interfaceGTRenderer
- Parameters:
mapContent
- the map content
-
getMapContent
Description copied from interface:GTRenderer
Gets theMapContent
instance which contains the data being rendered.- Specified by:
getMapContent
in interfaceGTRenderer
- Returns:
- the
MapContent
instance
-
isCanTransform
public boolean isCanTransform() -
getMathTransform
public static MathTransform getMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem destCRS)
-