Package com.luciad.earth.view.gxy
Class TLcdEarthGXYElevationRasterPainter
java.lang.Object
com.luciad.view.gxy.ALcdGXYPainter
com.luciad.earth.view.gxy.ALcdEarthGXYPainter
com.luciad.earth.view.gxy.TLcdEarthGXYRasterPainter
com.luciad.earth.view.gxy.TLcdEarthGXYSinglevaluedRasterPainter
com.luciad.earth.view.gxy.TLcdEarthGXYElevationRasterPainter
- All Implemented Interfaces:
ILcdCloneable
,ILcdPropertyChangeSource
,ILcdStatusSource
,ILcdGXYPainter
,ILcdGXYPainterProvider
,Serializable
,Cloneable
This
ILcdGXYPainter
can paint the elevation data of ILcdEarthTileSet
instances in a 2D view.
This painter has been replaced by TLcdGXYImagePainter
. Please consider using it
instead of this one.
Supported objects
This painter can visualize anyILcdEarthTileSet
that can produce tiles with a TLcdEarthElevationData
as
the tile data. The first such coverage in the tileset will be used (see TLcdEarthGXYRasterPainter.chooseTileSetCoverage(com.luciad.earth.tileset.ILcdEarthTileSet)
).
Visualization
To visualize the elevation data, each value is firstconverted to a short
which is then mapped to a color using the color model
. By default a standard color model is already set.
By default the tile level is chosen such that 4 pixels in the view map to at least one value, if
possible. This avoids most pixelation effects (e.g. that individual pixels are visible). To achieve
this a tile level is chosen with a higher pixel density
than the
view. This behavior can be changed by either setting the quality
or by overriding the TLcdEarthGXYRasterPainter.chooseTileSetLevel(java.awt.Graphics, int, com.luciad.view.gxy.ILcdGXYContext, com.luciad.shape.ILcdBounds)
method.
If some tiles are not available, the tiles at lower levels will be used automatically to avoid
gaps.
If required this painter will warp the elevation data between different coordinate systems,
otherwise it will just paint their linearly scaled images.
The bounds of the tile set will be painted instead of the tiles if the pixel density of the least
detailed level is too high
. There is no limit on the pixel
density by default so the bounds of a tile set will never be painted unless the start resolution
factor is set to a lower value. Typically this is fine for tile sets that cover the entire world
but it may be necessary to lower the start resolution factor if there are multiple smaller tile
sets in a view.
Incremental visualization
If the tileset supports asynchronous tile production, the visualization can be done incrementally. This means that the tiles will be requested asynchronously and the view will be repainted as the tiles become available. To enable this theALcdEarthGXYPainter.isAsynchronousTileRequestAllowed()
and ALcdEarthGXYPainter.isRepaintViewWhenTileAvailable()
should be
set to true
(default).
Caching
By default only the tiles necessary for the view will be cached using hard references (seeTLcdEarthGXYRasterPainter.setCacheSize(int)
). Other tiles will also be cached if there is enough
memory (see TLcdEarthGXYRasterPainter.isSoftCachingEnabled()
). Tiles that reside in either of these caches will
be updated automatically every minute (see TLcdEarthGXYRasterPainter.getUpdateInterval()
). You can use the
TLcdEarthGXYRasterPainter.updateTiles(com.luciad.view.gxy.ILcdGXYView)
method to update all tiles that are
currently cached immediately.
Performance considerations
- To achieve optimal performance the reference of the tileset and the world reference should match. If this is not the case the raster data will need to be warped on-the-fly.
- When incremental visualization is enabled other layers may also be repainted more frequently. This could result in reduced performance if this takes too much time.
- When incremental visualization is enabled in combination with asynchronous
painting it may sometimes take a significant amount of time before a paint is completed. More
specifically this situation occurs if the painting is interrupted before it can finish due to a
repaint for tile that has just become available. To avoid this you can disable the interruption
of paints (see
TLcdGXYAsynchronousPaintQueue.setInterruptPainting(boolean)
)
- Since:
- 8.2
- See Also:
-
Field Summary
Fields inherited from class com.luciad.view.gxy.ALcdGXYPainter
defaultCreationFillStyle, defaultCreationLineStyle, defaultFillStyle, defaultLineStyle, fWorkBounds
Fields inherited from interface com.luciad.view.gxy.ILcdGXYPainter
BODY, CREATING, DEFAULT, HANDLES, RESHAPING, SELECTED, SNAPS, TRANSLATING
-
Constructor Summary
ConstructorDescriptionCreates a new earth 2D elevation raster painter with the default cache size.TLcdEarthGXYElevationRasterPainter
(int aCacheSize) Creates a new earth 2D elevation raster painter with the given cache size. -
Method Summary
Modifier and TypeMethodDescriptionprotected TLcdEarthTileFormat
chooseTileFormat
(ILcdEarthTileSet aTileSet, ILcdEarthTileSetCoverage aCoverage) Chooses a tile format from the given tileset and coverage to be used for producing tiles.protected short
convertToShort
(double aElevation) Converts a native elevation value to a short.protected ILcdTile
createRasterTile
(ALcdEarthTile aTile) Creates anILcdTile
corresponding to the specifiedALcdEarthTile
.protected boolean
isValidCoverage
(ILcdEarthTileSetCoverage aCoverage) Returns whether the given coverage can be drawn by this painter.Methods inherited from class com.luciad.earth.view.gxy.TLcdEarthGXYSinglevaluedRasterPainter
getDefaultValue, getEmptyTile, getValueRange, getValueToShortOffset, getValueToShortScale, setDefaultValue, setQuality, setValueRange, setValueToShortOffset, setValueToShortScale
Methods inherited from class com.luciad.earth.view.gxy.TLcdEarthGXYRasterPainter
addStatusListener, chooseTileSetCoverage, chooseTileSetLevel, clearCache, clearCache, clone, configureBaseTileSet, createAsynchronousTileSet, getBoundsFillStyle, getBoundsLineStyle, getBrightness, getCacheSize, getColorModel, getContrast, getDisplayName, getOversamplingRate, getPaintCache, getPixelDensity, getQuality, getRequestFormat, getRGBImageFilter, getStartResolutionFactor, getTileContext, getTileSet, getTransparency, getUpdateInterval, getWarpBlockSize, isAllowOutdatedTiles, isAutoIncreaseCacheSize, isPaintBoundsFill, isPaintBoundsOutline, isParentTileRequestAllowed, isSoftCachingEnabled, paint, releaseHardReferencedCache, releaseHardReferencedCache, removeStatusListener, setAllowOutdatedTiles, setAsynchronousTileRequestAllowed, setAutoIncreaseCacheSize, setBoundsFillStyle, setBoundsLineStyle, setBrightness, setCacheSize, setColorModel, setContrast, setExceptionHandler, setObject, setOversamplingRate, setPaintBoundsFill, setPaintBoundsOutline, setPaintCache, setParentTileRequestAllowed, setRepaintViewWhenTileAvailable, setRGBImageFilter, setSoftCachingEnabled, setStartResolutionFactor, setTransparency, setUpdateInterval, setWarpBlockSize, updateTiles, updateTiles
Methods inherited from class com.luciad.earth.view.gxy.ALcdEarthGXYPainter
boundsSFCT, getExceptionHandler, getObject, getTileSet, getTileSetCoverage, isAsynchronousTileRequestAllowed, isRepaintViewWhenTileAvailable, isTouched
Methods inherited from class com.luciad.view.gxy.ALcdGXYPainter
addPropertyChangeListener, anchorPointSFCT, firePropertyChangeEvent, firePropertyChangeEvent, getCursor, getGXYPainter, isTraceOn, removePropertyChangeListener, setClassTraceOn, setDisplayName, setTraceOn, snapTarget, supportSnap
-
Constructor Details
-
TLcdEarthGXYElevationRasterPainter
public TLcdEarthGXYElevationRasterPainter(int aCacheSize) Creates a new earth 2D elevation raster painter with the given cache size.- Parameters:
aCacheSize
- The maximum number of entries in the cache.- See Also:
-
TLcdEarthGXYElevationRasterPainter
public TLcdEarthGXYElevationRasterPainter()Creates a new earth 2D elevation raster painter with the default cache size.
-
-
Method Details
-
isValidCoverage
Returns whether the given coverage can be drawn by this painter. The returned coverage should support a format that can be handled bycreateRasterTile(com.luciad.earth.tileset.ALcdEarthTile)
. The default implementation returnstrue
if the coverage is araster coverage
and the tiles set supports a format withTLcdEarthElevationData
as format class and no format name with the specified coverage.- Overrides:
isValidCoverage
in classTLcdEarthGXYSinglevaluedRasterPainter
- Parameters:
aCoverage
- the candidate coverage- Returns:
true
if the given coverage can be painted- See Also:
-
chooseTileFormat
protected TLcdEarthTileFormat chooseTileFormat(ILcdEarthTileSet aTileSet, ILcdEarthTileSetCoverage aCoverage) Chooses a tile format from the given tileset and coverage to be used for producing tiles. The format should be supported bycreateRasterTile(com.luciad.earth.tileset.ALcdEarthTile)
. The default implementation returns a format withTLcdEarthElevationData
as format class and no format name.- Overrides:
chooseTileFormat
in classTLcdEarthGXYSinglevaluedRasterPainter
- Parameters:
aTileSet
- the tileset whose tiles are being paintedaCoverage
- the coverage whose tiles are being painted.- Returns:
- the format in which tiles should be obtained
-
createRasterTile
Creates anILcdTile
corresponding to the specifiedALcdEarthTile
. The resulting raster tile is used in order to draw the output of a tileset usingTLcdRasterPainter
. The default implementation can only create a tile for tiles with aTLcdEarthElevationData
as tile data. Each elevation in this data is converted to a shorted usingconvertToShort(double)
.- Overrides:
createRasterTile
in classTLcdEarthGXYSinglevaluedRasterPainter
- Parameters:
aTile
- the tile to convert into a raster tile- Returns:
- a raster tile
-
convertToShort
protected short convertToShort(double aElevation) Converts a native elevation value to a short. The default implementation rounds the given value to the nearest integer value and clamps the result to the valid range of a short.- Overrides:
convertToShort
in classTLcdEarthGXYSinglevaluedRasterPainter
- Parameters:
aElevation
- An elevation value- Returns:
- A short representing the elevation.
- See Also:
-