Class TLcdDB2SpatialModelDecoder

java.lang.Object
com.luciad.format.db2.spatial.TLcdDB2SpatialModelDecoder
All Implemented Interfaces:
ILcdModelDecoder

@LcdService(service=ILcdModelDecoder.class, priority=20000) public class TLcdDB2SpatialModelDecoder extends Object implements ILcdModelDecoder
This model decoder decodes spatial tables from IBM DB2 Spatial Extender databases.

Input files

File Required Entry point Description
*.db2
x Java properties file containing all the necessary properties to access the spatial data

Alternatively, a Properties object can be constructed programmatically and passed to the model decoder.

The common properties needed to establish a connection are:

  • driver (default = com.ibm.db2.jcc.DB2Driver): the JDBC driver that will be used to connect to the database.
  • url: the database URL.
  • user: the database user name.
  • password: the user's password.
Other JDBC properties that can help to tune the database connection are passed on to JDBC as well.

The properties that identify the tables, columns, rows, etc. within the database are:

  • table: the name of the table containing the geometries. The table name may be qualified by prepending the database schema.
  • spatialColumn: the column containing the geometries.
  • spatialQueryColumn: an optional column containing the geometries that should be used in spatial queries. By default, this column is equal to the spatialColumn. It should not be changed for most typical applications.
  • featureNames.0, ...: the column names that should be retrieved as object features in the model. For read-only models, more complex SQL expressions, or columns from selection tables (see below) are accepted too.
  • featureDisplayNames.0, ...: optional display names corresponding to the feature names.
  • primaryFeatureIndex (default = 0): the index of the feature that serves as a primary key.
  • primaryFeatureAutoGenerated (default = false): specifies whether the database automatically generates the primary key whenever a geometry is inserted into the spatial table. The primary feature on the java side will then be updated with this generated value.
  • selectionTables (default = null): an optional comma-separated list of tables required to constrain the geometries of the model. These tables will be added after the main table in the FROM parts of SELECT queries. Note that any column names that are ambiguous (because they occur in multiple tables), have to be prefixed with the suitable table names.
  • selectionFilter (default = null): an optional SQL select query to constrain the geometries of the model. This query will be added after the spatial query in the WHERE parts of SELECT queries.
  • SRID (default = null): the spatial reference identifier to be used. If not specified, the SRID is computed from the EPSG property, from the db2gse.ST_GEOMETRY_COLUMNS catalog view or from the first geometry object.
  • EPSG (default = null): an optional EPSG code corresponding to the model reference. If the SRID property is present, the EPSG propery is ignored.
  • bounds (default = null): specifies the x,y,width and height of the model bounds. If not specified, the model bounds are computed from the database.
  • useSHP (default=false): specifies whether the format of the geometry queries will use the ESRI Shape representation or the WKB (well-known binary) representation.

Supported transfer protocols

  • This model decoder supports all protocols that are supported by the underlying JDBC driver.

Model structure

  • This model decoder creates a model per spatial table.
  • All models returned by this model decoder implement ILcd2DBoundsIndexedModel.

Model descriptor

Three optional properties allow to override some metadata in the model descriptor:
  • sourceName (default = the source name that is passed to the model decoder): the source name of the model descriptor.
  • typeName (default = the display name of the model decoder): the type name of the model descriptor. The type name is also used when composing the name of the data model.
  • displayName (default = the spatial table name): the display name of the model descriptor. The display name is also used when composing the name of the data model and the name of the data type.

Model reference

By default, the model reference of a decoded model is determined by the SRID of the spatial table. If no model reference can be created the default model reference set on this decoder will be used (see setDefaultModelReference(com.luciad.model.ILcdModelReference)).

Model elements

Useful settings

  • The decoder property readOnly can be set to specify whether the model will be used as a read-only model.

Sample code


 ILcdModelDecoder decoder =
   new TLcdDB2SpatialModelDecoder(true);

 ILcdModel model = decoder.decode("countries.db2");
 

The file countries.db2 could for instance contain the following properties:


 # The basic database connection properties.
 driver    = com.ibm.db2.jcc.DB2Driver
 url       = jdbc:db2://host_name:50002/database_name
 user      = db2inst1
 password  = db2inst1

 # The data of interest.
 table         = COUNTRIES
 spatialColumn = GEOM

 # The feature columns to be decoded.
 featureNames.0 = ID

 # The index of the feature that can be used as primary key.
 primaryFeatureIndex = 0

 # Optional extra tables and SQL condition to restrict the database elements.
 # Note that the above feature names also have to be prefixed with the table
 # name if the column names are ambiguous, like the ID column below.
 #selectionTables = POPULATION
 #selectionFilter = COUNTRIES.ID = POPULATION.ID AND POPULATION.VALUE > 1e7

 # Optional maximum cache size (expressed as number of objects, default is 100).
 maxCacheSize = 500

 # Optionally close the database connection after each query.
 # Only advisable when using a connection pooling database driver.
 #alwaysCloseConnection = false

 # Optionally override the SRID specified in the database.
 #SRID = 1003

 # Optionally specify the model bounds: x,y,width,height.
 #bounds=0,0,25,25
 

Performance tips

Some optional properties in the properties file or object can help to tune the database access:
  • alwaysCloseConnection (default = false): an optional boolean to specify that the database connection should be closed after each query. Setting this flag can be useful for database drivers that pool connections, so the connections are reused instead of really being closed.
  • maxCacheSize (default = 100, or the value set on the decoder): the maximum number of objects in the cache. Using a cache will improve performance if transferring and decoding geometries and their features is relatively expensive compared to performing the original SQL queries. The current implementation of the decoder will then perform queries in two passes, first retrieving the relevant primary keys and then retrieving and decoding the actual geometries and features that are not in the cache. On the other hand, setting the cache size to 0 may be better if performing SQL queries is relatively expensive. The current implementation of the decoder will then perform queries in a single pass, retrieving and decoding the relevant geometries every time.

Thread safety

  • The decoding of models is thread-safe, as long as no properties are changed during the decoding.
  • The decoded models are thread-safe for read access.

Supported versions and specifications

  • IBM DB2 Spatial Extender Module with the Geodetic Management Feature, versions 9.x.

Known limitations

  • Some rare SRID model references are not supported.
  • Updating database views and data sets involving additional tables is generally not possible.
  • 3D shapes can only be encoded/decoded when the useSHP option is enabled.
Since:
8.3.03
  • Constructor Details

    • TLcdDB2SpatialModelDecoder

      public TLcdDB2SpatialModelDecoder()
      Creates a new, read-write, DB2 Spatial model decoder.
    • TLcdDB2SpatialModelDecoder

      public TLcdDB2SpatialModelDecoder(boolean aReadOnly)
      Creates a new DB2 Spatial model decoder.
      Parameters:
      aReadOnly - specifies the type of models the decoder should construct.
      See Also:
  • Method Details

    • setDefaultModelReference

      public void setDefaultModelReference(ILcdModelReference aDefaultModelReference)
      Sets the default model reference to be assigned to decoded models if no model reference can be created based on information from the database. The default value is a geodetic WGS84 reference.
      Parameters:
      aDefaultModelReference - the default model reference.
      See Also:
    • getDefaultModelReference

      public ILcdModelReference getDefaultModelReference()
      Returns the default model reference to be assigned to decoded models.
      Returns:
      the default model reference.
      See Also:
    • setDefaultMaxCacheSize

      public void setDefaultMaxCacheSize(int aDefaultMaxCacheSize)
      Sets the default maximum size of the cache. It is possible to override this value by means of the maxCacheSize property in the properties file.
      Parameters:
      aDefaultMaxCacheSize - the default maximum number of objects in the cache.
    • getDefaultMaxCacheSize

      public int getDefaultMaxCacheSize()
      Returns the default maximum size of the cache.
      Returns:
      the default maximum cache size.
    • setReadOnly

      public void setReadOnly(boolean aReadOnly)
      Specifies whether the decoded models should be read-only or not.
      Parameters:
      aReadOnly - specifies the type of models the decoder should construct. If true, the decoder will create TLcdDatabaseReadOnlyModel objects. If false, the decoder will create TLcdDatabaseModel objects.
    • getReadOnly

      public boolean getReadOnly()
      Returns true if the decoded model is read-only, false otherwise.
      Returns:
      true if the decoded model is read-only, false otherwise.
    • getDisplayName

      public String getDisplayName()
      Description copied from interface: ILcdModelDecoder
      Returns a short, displayable name for the format that is decoded by this ILcdModelDecoder.
      Specified by:
      getDisplayName in interface ILcdModelDecoder
      Returns:
      the displayable name of this ILcdModelDecoder.
    • canDecodeSource

      public boolean canDecodeSource(String aSourceAsString)
      Description copied from interface: ILcdModelDecoder
      Checks whether this model decoder can decode the specified data source. It is acceptable for this method to return true for a source name while decode throws an exception for that same source name.

      For performance reasons, we strongly recommend that this will only be a simple test. For example: check the file extension of a file, but not that the file exists or contains expected content.

      Specified by:
      canDecodeSource in interface ILcdModelDecoder
      Parameters:
      aSourceAsString - the data source to be verified; typically a file name or a URL.
      Returns:
      true if this decoder can likely decode the data specified by the source name, false otherwise.
      See Also:
    • decode

      public ILcdModel decode(String aSourceName) throws IOException
      Decodes a new database model based on the properties specified in the given file.
      Specified by:
      decode in interface ILcdModelDecoder
      Parameters:
      aSourceName - the data source to be decoded; typically a file name or a URL.
      Returns:
      A model containing the decoded data. While null is allowed, implementors are advised to throw an error instead.
      Throws:
      IOException - for any exceptions caused by IO problems or invalid data. Since decoding invalid data almost always results in RunTimeExceptions (NullPointerException, IndexOutOfBoundsException, IllegalArgumentException, ...) on unexpected places, implementations are advised to catch RuntimeExceptions in their decode() method, and wrap them into an IOException, as illustrated in the code snippet below.
      
         public ILcdModel decode( String aSourceName ) throws IOException {
            try (InputStream input = fInputStreamFactory.createInputStream(aSourceName)) {
               // Perform decoding ...
            } catch (RuntimeException e) {
               throw new IOException(e);
            }
         }
       
      See Also:
    • decode

      public ILcdModel decode(Properties aProperties) throws IOException
      Decodes a new database model based on the given properties.
      Throws:
      IOException