Class TLcdEarthTexturedTerrainTileSet

java.lang.Object
com.luciad.earth.tileset.terrain.TLcdEarthTexturedTerrainTileSet
All Implemented Interfaces:
ILcdEarthTileSet, ILcdBounded, ILcdDisposable, AutoCloseable

public class TLcdEarthTexturedTerrainTileSet extends Object implements ILcdEarthTileSet
Combines terrain texture and geometry tiles into TLcdEarthTexturedTerrainTileVertexArray objects. These tiles can be visualized as a 3D terrain.

Coverages

CoverageCommentsSupported format
textureThis coverage can be specified in the constructor and contains the texture or image data of the terrain.BufferedImage orTLcdEarthTextureData
elevationThis coverage can be specified in the constructor and contains the elevation data of the terrain. The elevation data can be used to generate the terrain geometry on-the-fly.TLcdEarthElevationData
geometryThis coverage can be specified in the constructor and contains the geometry of the terrain.TLcdEarthTerrainTileVertexArray
textured geometryThis coverage combines the texture and geometry data into textured geometry tiles (that is terrain tiles). TLcdEarthTexturedTerrainTileVertexArray

Textured geometry tiles

When producing a tile for the textured geometry coverage and either the geometry tile or image tile is missing this tile set will try to produce the missing image/geometry tile by falling back to a lower level. This fall back is only supported for geometry tiles if they are elevation-based (that is no geometry tile set was specified in the constructor). The fallback behavior can be disabled by setting setFallbackForTerrainTiles(boolean) to false. The advantage of using the fall back is that the texture and geometry/elevation tile sets do not need to contain the same set of tiles. As a result less data may need to be stored and retrieved.

The resolution of the textured geometry tiles can differ from the resolution of the tiles in the texture coverage. The difference can be changed through the setTerrainTextureResolution(int) method. By default the terrain texture resolution is set to 128.

Thread safety

This tileset is thread-safe for tile reading.
Since:
8.2
  • Constructor Details

    • TLcdEarthTexturedTerrainTileSet

      public TLcdEarthTexturedTerrainTileSet(ILcdEarthTileSet aGeometrySet, ILcdEarthRasterTileSetCoverage aGeometryTileSetCoverage, ILcdEarthTileSet aTextureSet, ILcdEarthRasterTileSetCoverage aTextureTileSetCoverage)
      Constructs a new TLcdEarthTextureTerrainTileSet with the specified geometry and texture data. The tileset reference is assumed to be geodetic.

      The geometry and texture tileset should have the same tile grid structure (that is bounds, level count, #rows and #columns).

      Parameters:
      aGeometrySet - the tileset that can be used to generate the geometry data.
      aGeometryTileSetCoverage - the coverage in aGeometrySet that contains geometry data.
      aTextureSet - the tileset that can be used to generate the texture data.
      aTextureTileSetCoverage - the coverage in aTextureSet that contains texture data.
      Throws:
      IllegalArgumentException - if the geometry or texture tileset/coverage are not compatible or unsupported.
    • TLcdEarthTexturedTerrainTileSet

      public TLcdEarthTexturedTerrainTileSet(ILcdEarthTileSet aGeometrySet, ILcdEarthRasterTileSetCoverage aGeometryTileSetCoverage, ILcdEarthTileSet aTextureSet, ILcdEarthRasterTileSetCoverage aTextureTileSetCoverage, ILcdGeoReference aModelReference)
      Constructs a new TLcdEarthTextureTerrainTileSet with the specified geometry and texture data.

      The geometry and texture tileset should have the same tile grid structure (that is bounds, level count, #rows and #columns).

      Parameters:
      aGeometrySet - the tileset that can be used to generate the geometry data.
      aGeometryTileSetCoverage - the coverage in aGeometrySet that contains geometry data.
      aTextureSet - the tileset that can be used to generate the texture data.
      aTextureTileSetCoverage - the coverage in aTextureSet that contains texture data.
      aModelReference - the reference of the tileset.
      Throws:
      IllegalArgumentException - if the geometry or texture tileset/coverage are not compatible or unsupported.
    • TLcdEarthTexturedTerrainTileSet

      public TLcdEarthTexturedTerrainTileSet(ILcdEarthTileSet aGeometrySet, ILcdEarthRasterTileSetCoverage aGeometryTileSetCoverage, ILcdEarthTileSet aElevationSet, ILcdEarthRasterTileSetCoverage aElevationTileSetCoverage, ILcdEarthTileSet aTextureSet, ILcdEarthRasterTileSetCoverage aTextureTileSetCoverage)
      Constructs a new TLcdEarthTextureTerrainTileSet with the specified geometry and texture data. The tileset reference is assumed to be geodetic.

      The geometry and texture tileset should have the same tile grid structure (that is bounds, level count, #rows and #columns). If either the tileset for geometry or elevation data is null the tileset for the other data will be used to generate it on-the-fly.

      Parameters:
      aGeometrySet - the tileset that can be used to generate the geometry data.
      aGeometryTileSetCoverage - the coverage in aGeometrySet that contains geometry data.
      aElevationSet - the tileset that can be used to generate the elevation data or null.
      aElevationTileSetCoverage - the coverage in aElevationSet that contains elevation data or null.
      aTextureSet - the tileset that can be used to generate the texture data.
      aTextureTileSetCoverage - the coverage in aTextureSet that contains texture data.
      Throws:
      IllegalArgumentException - if the geometry, elevation or texture tileset/coverage are not compatible/unsupported or if both the geometry and elevation tilesets are null
    • TLcdEarthTexturedTerrainTileSet

      public TLcdEarthTexturedTerrainTileSet(ILcdEarthTileSet aGeometrySet, ILcdEarthRasterTileSetCoverage aGeometryTileSetCoverage, ILcdEarthTileSet aElevationSet, ILcdEarthRasterTileSetCoverage aElevationTileSetCoverage, ILcdEarthTileSet aTextureSet, ILcdEarthRasterTileSetCoverage aTextureTileSetCoverage, ILcdGeoReference aModelReference)
      Constructs a new TLcdEarthTextureTerrainTileSet with the specified geometry and texture data.

      The geometry, elevation and texture tileset should have the same tile grid structure (that is bounds, level count, #rows and #columns). If either the tileset for geometry or elevation data is null the tileset for the other data will be used to generate it on-the-fly.

      Parameters:
      aGeometrySet - the tileset that can be used to generate the geometry data or null.
      aGeometryTileSetCoverage - the coverage in aGeometrySet that contains geometry data or null.
      aElevationSet - the tileset that can be used to generate the elevation data or null.
      aElevationTileSetCoverage - the coverage in aElevationSet that contains elevation data or null.
      aTextureSet - the tileset that can be used to generate the texture data.
      aTextureTileSetCoverage - the coverage in aTextureSet that contains texture data.
      aModelReference - the reference of the tileset.
      Throws:
      IllegalArgumentException - if the geometry, elevation or texture tileset/coverage are not compatible/unsupported or if both the geometry and elevation tilesets are null
  • Method Details

    • setTerrainTextureResolution

      public void setTerrainTextureResolution(int aTextureResolution)
      Sets the resolution of the terrain textures. The specified resolution is only a hint and may not be support. If it is not supported a similar supported resolution is set instead.
      Parameters:
      aTextureResolution - the desired resolution in pixels
    • getTerrainTextureResolution

      public int getTerrainTextureResolution()
      Returns the resolution of the terrain textures.

      This resolution may differ from the resolution of the tiles in the texture coverage.

      Returns:
      the resolution in pixels
      See Also:
    • getTileLifeTime

      public long getTileLifeTime()
      Returns the maximum time for which a cached tile can be reused.
      Returns:
      the time in milliseconds
      See Also:
    • setTileLifeTime

      public void setTileLifeTime(long aTime)
      Sets the maximum time for which a tile can be reused.
      Parameters:
      aTime - the time in milliseconds
      See Also:
    • clearCache

      public void clearCache()
      Clears the internal cache.

      The reuse of tiles can for example occur because some information of the neighbouring tiles is necessary (ex. to avoid discontinuous data at the tile borders) for producing a tile.

      See Also:
    • updateCache

      public void updateCache()
      Updates the internal cache.
      See Also:
    • isFallbackForTerrainTiles

      public boolean isFallbackForTerrainTiles()
      Returns whether this tile set will try to produce a missing geometry or texture tile needed for producing a terrain tile (that is a tile in the textured geometry coverage) by falling back to a lower level if the other tile is available (that is no fall back will occur if both the geometry and texture tile are not available). This fall back is only supported for geometry tiles if they are elevation-based (that is no geometry tile set was specified in the constructor).

      This is enabled by default.

      Returns:
      true if this tile set will try to fall back to a lower level for terrain tiles
    • setFallbackForTerrainTiles

      public void setFallbackForTerrainTiles(boolean aFallbackForTerrainTiles)
      Sets whether this tile set should try to fall back to a lower level for terrain tiles.
      Parameters:
      aFallbackForTerrainTiles - whether this tile set should try to fall back to a lower level for terrain tiles
      See Also:
    • getTexturedGeometryCoverage

      public ILcdEarthTileSetCoverage getTexturedGeometryCoverage()
      Returns the coverage with the textured geometry.
      Returns:
      the textured geometry coverage.
    • getElevationCoverage

      public ILcdEarthRasterTileSetCoverage getElevationCoverage()
      Returns the coverage with the elevations.
      Returns:
      the elevation coverage.
    • getGeometryCoverage

      public ILcdEarthRasterTileSetCoverage getGeometryCoverage()
      Returns the coverage with the geometry.
      Returns:
      the geometry coverage.
    • getTextureCoverage

      public ILcdEarthRasterTileSetCoverage getTextureCoverage()
      Returns the coverage with the textures.
      Returns:
      the geometry coverage.
    • produceTile

      public void produceTile(ILcdEarthTileSetCoverage aCoverage, int aLevel, long aTileX, long aTileY, ILcdGeoReference aGeoReference, TLcdEarthTileFormat aFormat, TLcdEarthTileOperationMode aMode, ILcdEarthTileSetCallback aCallback, Object aContext)
      Description copied from interface: ILcdEarthTileSet
      Produces the requested tile, and invoke the supplied callback when done. The resulting tile is passed to the call back's tileAvailable() method. If the tile cannot be produced for some reason, the method tileNotAvailable() should be called instead.

      If the tileset supports it and aMode is TLcdEarthTileOperationMode.PREFER_ASYNCHRONOUS, the tile request may be executed asynchronously. However, the callback must be invoked at some point in time, unless the cancelTile() method is used to cancel the tile request before it is executed. If aMode is TLcdEarthTileOperationMode.FORCE_SYNCHRONOUS, the request must be executed synchronously and the callback must be invoked before produceTile() returns.

      Tiles may be requested in reference systems other than the native geo reference of the underlying data, provided that the isGeoReferenceSupported() method returns true for the requested reference. If this is not the case, the tileset should call tileNotAvailable(). If the tileset calls tileAvailable(), the geo reference of the resulting tile must be equal to aGeoReference, and the tile's bounds must likewise be expressed in this reference.

      Similarly, tiles may be requested in different data formats, as described by TLcdEarthTileFormat. The format determines the type of the data object that will be contained in the requested tile. To check if a format is supported, use isFormatSupported(). If the specified format is not supported, the tileset should call tileNotAvailable().

      The context parameter may be used to pass application-specific data into the tileset. If it is not needed, its value may be null.

      Specified by:
      produceTile in interface ILcdEarthTileSet
      Parameters:
      aCoverage - the coverage from which the tile is requested
      aLevel - the level from which the tile is requested
      aTileX - the column index of the requested tile
      aTileY - the row index of the requested tile
      aGeoReference - the reference system in which the tile should be returned
      aFormat - the desired format of the tile's data
      aMode - controls the synchronous or asynchronous behaviour of the tileset
      aCallback - will be invoked when the tile is available to be used
      aContext - application-specific data to be used by the tileset, if any
    • cancelTile

      public void cancelTile(int aLevel, long aTileX, long aTileY, ILcdEarthTileSetCoverage aCoverage, ILcdGeoReference aGeoReference, TLcdEarthTileFormat aFormat, ILcdEarthTileSetCallback aCallback, Object aContext)
      Description copied from interface: ILcdEarthTileSet
      Cancels any pending tile requests for the given parameters. This method is only meaningful in tilesets that support the asynchronous operation mode. If cancelTile() is called, the tileset is no longer required to invoke the ILcdEarthTileSetCallback for the tile in question. The tileset is not obligated to honor the cancelTile() request, but if cancelTile() is not called, then it is required to invoke the ILcdEarthTileSetCallback at some point.
      Specified by:
      cancelTile in interface ILcdEarthTileSet
      Parameters:
      aLevel - the level from which the tile is requested
      aTileX - the column index of the requested tile
      aTileY - the row index of the requested tile
      aCoverage - the coverage from which the tile is requested
      aGeoReference - the reference system in which the tile is requested
      aFormat - the format in which the tile is requested
      aCallback - would be invoked when the tile would have been available to be used
      aContext - application-specific data to be used by the tileset, if any
    • dispose

      public void dispose()
      Description copied from interface: ILcdEarthTileSet
      This method releases all resources held by the repository, such as file locks, threads or server connections.
      Specified by:
      dispose in interface ILcdDisposable
      Specified by:
      dispose in interface ILcdEarthTileSet
    • getBounds

      public ILcdBounds getBounds()
      Description copied from interface: ILcdEarthTileSet
      Returns the bounds of this tile set, expressed in the model reference of the model that contains this tile set.
      Specified by:
      getBounds in interface ILcdBounded
      Specified by:
      getBounds in interface ILcdEarthTileSet
      Returns:
      the bounds of this tile set
      See Also:
    • getLevelCount

      public int getLevelCount()
      Description copied from interface: ILcdEarthTileSet
      Returns the number of available detail levels. Level 0 is the coarsest level.
      Specified by:
      getLevelCount in interface ILcdEarthTileSet
      Returns:
      the number of available detail levels
    • getTileRowCount

      public long getTileRowCount(int aLevel)
      Description copied from interface: ILcdEarthTileSet
      Returns the number of rows in the tile grid at the given level. Each level should have twice the number of rows of the previous one.
      Specified by:
      getTileRowCount in interface ILcdEarthTileSet
      Parameters:
      aLevel - the level to be queried
      Returns:
      the number of tile rows on the specified level
    • getTileColumnCount

      public long getTileColumnCount(int aLevel)
      Description copied from interface: ILcdEarthTileSet
      Returns the number of columns in the tile grid at the given level. Each level should have twice the number of columns of the previous one.
      Specified by:
      getTileColumnCount in interface ILcdEarthTileSet
      Parameters:
      aLevel - the level to be queried
      Returns:
      the number of tile columns on the specified level
    • getTileSetCoverageCount

      public int getTileSetCoverageCount()
      Description copied from interface: ILcdEarthTileSet
      Returns the number of coverages this tileset contains.
      Specified by:
      getTileSetCoverageCount in interface ILcdEarthTileSet
      Returns:
      the number of coverages this tileset contains
    • getTileSetCoverage

      public ILcdEarthTileSetCoverage getTileSetCoverage(int aIndex)
      Description copied from interface: ILcdEarthTileSet
      Returns the coverage at the specified index.
      Specified by:
      getTileSetCoverage in interface ILcdEarthTileSet
      Parameters:
      aIndex - the index of the coverage to return
      Returns:
      the requested ILcdEarthTileSetCoverage
    • containsTileSetCoverage

      public boolean containsTileSetCoverage(String aCoverageName)
      Description copied from interface: ILcdEarthTileSet
      Returns true if the repository contains a coverage with the specified name.
      Specified by:
      containsTileSetCoverage in interface ILcdEarthTileSet
      Parameters:
      aCoverageName - the name of the coverage to look for
      Returns:
      true if the repository contains a coverage with the specified name, false otherwise
    • getTileSetCoverage

      public ILcdEarthTileSetCoverage getTileSetCoverage(String aCoverageName)
      Description copied from interface: ILcdEarthTileSet
      Returns the tileset coverage with the specified name.
      Specified by:
      getTileSetCoverage in interface ILcdEarthTileSet
      Parameters:
      aCoverageName - the name of the coverage to look for
      Returns:
      the tileset coverage with the specified name
    • updateTile

      public void updateTile(ALcdEarthTile aTile, TLcdEarthTileOperationMode aMode, ILcdEarthTileSetCallback aCallback, Object aContext)
      Description copied from interface: ILcdEarthTileSet
      Produces an updated version of the given tile, if necessary. Produces the same tile if the given tile is up to date.
      Specified by:
      updateTile in interface ILcdEarthTileSet
      Parameters:
      aTile - tile to check
      aMode - controls the synchronous or asynchronous behaviour of the tileset
      aCallback - will be invoked when the tile is available to be used
      aContext - application-specific data to be used by the tileset, if any
    • updateTile

      public ALcdEarthTile updateTile(ALcdEarthTile aEarthTile, Object aContext) throws IOException
      Description copied from interface: ILcdEarthTileSet
      Returns an updated version of the specified tile.
      Specified by:
      updateTile in interface ILcdEarthTileSet
      Parameters:
      aEarthTile - the tile to check
      aContext - application-specific data to be used by the tileset, if any
      Returns:
      the tile itself or a new, updated version
      Throws:
      IOException - if the tile cannot be updated
    • produceTile

      public ALcdEarthTile produceTile(ILcdEarthTileSetCoverage aCoverage, int aLevel, long aX, long aY, ILcdGeoReference aGeoReference, TLcdEarthTileFormat aFormat, Object aContext)
      Description copied from interface: ILcdEarthTileSet
      Gets a tile from the repository.
      Specified by:
      produceTile in interface ILcdEarthTileSet
      Parameters:
      aCoverage - the coverage from which to query a tile
      aLevel - the detail level for which to query a tile
      aX - the column index at which to query a tile
      aY - the row index at which to query a tile
      aGeoReference - the georeference of the requested tile
      aFormat - the format of the requested tile
      aContext - application-specific data to be used by the tileset, if any
      Returns:
      the requested tile, or null if the repository does not contain this tile
    • containsTile

      public boolean containsTile(ILcdEarthTileSetCoverage aCoverage, int aLevel, long aX, long aY, Object aContext)
      Description copied from interface: ILcdEarthTileSet
      Returns true if the repository contains the specified tile.
      Specified by:
      containsTile in interface ILcdEarthTileSet
      Parameters:
      aCoverage - the coverage from which to query a tile
      aLevel - the detail level for which to query a tile
      aX - the column index at which to query a tile
      aY - the row index at which to query a tile
      aContext - application-specific data to be used by the tileset, if any
      Returns:
      true if the repository contains the requested tile
    • isGeoReferenceSupported

      public boolean isGeoReferenceSupported(ILcdEarthTileSetCoverage aCoverage, ILcdGeoReference aGeoReference)
      Description copied from interface: ILcdEarthTileSet
      Returns true if the tileset can produce tiles for the given coverage in the given reference system. Note that any reference other than the native reference may result in reduced performance.

      This method must always return true for the native reference of the coverage. If it returns true for any other georeference, then the tileset must be able to handle the georeference in question in its produceTile() method.

      Specified by:
      isGeoReferenceSupported in interface ILcdEarthTileSet
      Parameters:
      aCoverage - the coverage to check for
      aGeoReference - the reference to check for
      Returns:
      true if the given coverage can be queried with the given reference
    • isFormatSupported

      public boolean isFormatSupported(ILcdEarthTileSetCoverage aCoverage, TLcdEarthTileFormat aFormat)
      Description copied from interface: ILcdEarthTileSet
      Returns true if the tileset can produce tiles for the given coverage in the given format. Note that any format other than the native format may result in reduced performance.

      This method must always return true for the native format of the coverage. If it returns true for any other format, then the tileset must be able to handle the format in question in its produceTile() method.

      Specified by:
      isFormatSupported in interface ILcdEarthTileSet
      Parameters:
      aCoverage - the coverage to check for
      aFormat - the format to check for
      Returns:
      true if the given coverage can be queried with the given format