org.geotools.coverage.grid.io
Class AbstractGridCoverage2DReader

Object
  extended by AbstractGridCoverage2DReader
All Implemented Interfaces:
GridCoverageReader
Direct Known Subclasses:
ArcGridReader, ArcSDEGridCoverage2DReaderJAI, BaseGridCoverage2DReader, GeoTiffReader, GTopo30Reader, ImageMosaicJDBCReader, ImageMosaicReader, ImagePyramidReader, JP2KReader, WorldImageReader

public abstract class AbstractGridCoverage2DReader
extends Object
implements GridCoverageReader

This class is a first attempt for providing a way to get more informations out of a single 2D raster datasets (x,y). It is worth to remark that for the moment this is thought for 2D rasters not for 3D or 4D rasters (x,y,z,t).

The main drawback I see with the current GeoApi GridCoverageReader interface is that there is no way to get real information about a raster source unless you instantiate a GridCoverage. As an instance it is impossible to know the envelope, the number of overviews, the tile size. This information is needed in order to perform decimation on reading or to use built-in overviews
This really impacts the ability to exploit raster datasets in a desktop environment where caching is crucial.

Since:
2.3
Author:
Simone Giannecchini, GeoSolutions

Field Summary
protected  boolean closeMe
          Temp variable used in many readers.
protected  GridCoverageFactory coverageFactory
          GridCoverageFactory instance.
protected  String coverageName
          Coverage name
protected  CoordinateReferenceSystem crs
          crs for this coverage
protected static Color[] demColors
          Default color ramp.
static double EPS
           
protected  boolean gzipped
          In case we are trying to read from a GZipped file this will be set to true.
protected  double[] highestRes
          Highest resolution availaible for this reader.
protected  Hints hints
          Hints used by the AbstractGridCoverage2DReader subclasses.
protected  ImageInputStream inStream
          Input stream that can be used to initialize subclasses of AbstractGridCoverage2DReader.
protected  int numOverviews
          This contains the number of overviews.aaa
protected  GeneralEnvelope originalEnvelope
          Envelope read from file
protected  GridEnvelope originalGridRange
          The original GridRange for the GridCoverage2D of this reader.
protected  double[][] overViewResolutions
          Resolutions avialaible through an overviews based mechanism.
protected  MathTransform raster2Model
          2DGridToWorld math transform.
protected  Object source
          Source to read from
 
Constructor Summary
AbstractGridCoverage2DReader()
           
 
Method Summary
protected  GridCoverage createImageCoverage(PlanarImage image)
          Creates a GridCoverage for the provided PlanarImage using the originalEnvelope that was provided for this coverage.
protected  GridCoverage2D createImageCoverage(PlanarImage image, MathTransform raster2Model)
          Creates a GridCoverage for the provided PlanarImage using the raster2Model that was provided for this coverage.
protected  void decimationOnReadingControl(Integer imageChoice, ImageReadParam readP, double[] requestedRes)
          This method is responsible for evaluating possible subsampling factors once the best resolution level has been found, in case we have support for overviews, or starting from the original coverage in case there are no overviews available.
 void dispose()
          Disposes this reader.
protected  void finalize()
          Forcing disposal of this AbstractGridCoverage2DReader which may keep an ImageInputStream open.
 CoordinateReferenceSystem getCrs()
          Retrieves the CoordinateReferenceSystem for dataset pointed by this AbstractGridCoverage2DReader.
 String getCurrentSubname()
           
 int getGridCoverageCount()
           
 ServiceInfo getInfo()
          Information about this source.
 String[] getMetadataNames()
           
 String getMetadataValue(String name)
           
 GeneralEnvelope getOriginalEnvelope()
          Retrieves the GeneralEnvelope for this AbstractGridCoverage2DReader.
 GridEnvelope getOriginalGridRange()
          Retrieves the GeneralGridRange that represents the raster grid dimensions of the highest resolution level in this dataset.
 MathTransform getOriginalGridToWorld(PixelInCell pixInCell)
          Retrieves the original grid to world transformation for this AbstractGridCoverage2DReader.
protected static double[] getResolution(GeneralEnvelope envelope, Rectangle2D dim, CoordinateReferenceSystem crs)
          This method is responsible for computing the resolutions in for the provided grid geometry in the provided crs.
 Object getSource()
          Retrieves the source for this AbstractGridCoverage2DReader.
 boolean hasMoreGridCoverages()
           
 String[] listSubNames()
           
abstract  GridCoverage2D read(GeneralParameterValue[] parameters)
          Read the current grid coverage from the stream.
protected  Integer setReadParams(OverviewPolicy overviewPolicy, ImageReadParam readP, GeneralEnvelope requestedEnvelope, Rectangle requestedDim)
          This method is responsible for preparing the read param for doing an ImageReader.read(int, ImageReadParam).
 void skip()
           
 
Methods inherited from class Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface GridCoverageReader
getFormat
 

Field Detail

EPS

public static final double EPS
See Also:
Constant Field Values

demColors

protected static final Color[] demColors
Default color ramp. Preset colors used to generate an Image from the raw data


numOverviews

protected int numOverviews
This contains the number of overviews.aaa


raster2Model

protected MathTransform raster2Model
2DGridToWorld math transform.


crs

protected CoordinateReferenceSystem crs
crs for this coverage


originalEnvelope

protected GeneralEnvelope originalEnvelope
Envelope read from file


coverageName

protected String coverageName
Coverage name


source

protected Object source
Source to read from


hints

protected Hints hints
Hints used by the AbstractGridCoverage2DReader subclasses.


highestRes

protected double[] highestRes
Highest resolution availaible for this reader.


closeMe

protected boolean closeMe
Temp variable used in many readers.


gzipped

protected boolean gzipped
In case we are trying to read from a GZipped file this will be set to true.


originalGridRange

protected GridEnvelope originalGridRange
The original GridRange for the GridCoverage2D of this reader.


inStream

protected ImageInputStream inStream
Input stream that can be used to initialize subclasses of AbstractGridCoverage2DReader.


overViewResolutions

protected double[][] overViewResolutions
Resolutions avialaible through an overviews based mechanism.


coverageFactory

protected GridCoverageFactory coverageFactory
GridCoverageFactory instance.

Constructor Detail

AbstractGridCoverage2DReader

public AbstractGridCoverage2DReader()
Method Detail

read

public abstract GridCoverage2D read(GeneralParameterValue[] parameters)
                             throws IllegalArgumentException,
                                    IOException
Read the current grid coverage from the stream.

Example:


 
The method hasMoreGridCoverages() should be invoked first in order to verify that a coverage is available.

Specified by:
read in interface GridCoverageReader
Parameters:
parameters - Optional parameters matching Format.getReadParameters().
Returns:
a grid coverage from the input source.
Throws:
InvalidParameterNameException - if a parameter in parameters doesn't have a recognized name.
InvalidParameterValueException - if a parameter in parameters doesn't have a valid value.
ParameterNotFoundException - if a parameter was required for the operation but was not provided in the parameters list.
CannotCreateGridCoverageException - if the coverage can't be created for a logical reason (for example an unsupported format, or an inconsistency found in the data).
IOException - if a read operation failed for some other input/output reason, including FileNotFoundException if no file with the given name can be found, or IIOException if an error was thrown by the underlying image library.
IllegalArgumentException

setReadParams

protected Integer setReadParams(OverviewPolicy overviewPolicy,
                                ImageReadParam readP,
                                GeneralEnvelope requestedEnvelope,
                                Rectangle requestedDim)
                         throws IOException,
                                TransformException
This method is responsible for preparing the read param for doing an ImageReader.read(int, ImageReadParam).

This method is responsible for preparing the read param for doing an ImageReader.read(int, ImageReadParam). It sets the passed ImageReadParam in terms of decimation on reading using the provided requestedEnvelope and requestedDim to evaluate the needed resolution. It also returns and Integer representing the index of the raster to be read when dealing with multipage raster.

Parameters:
overviewPolicy - it can be one of Hints#VALUE_OVERVIEW_POLICY_IGNORE, Hints#VALUE_OVERVIEW_POLICY_NEAREST, Hints#VALUE_OVERVIEW_POLICY_QUALITY or Hints#VALUE_OVERVIEW_POLICY_SPEED. It specifies the policy to compute the overviews level upon request.
readP - an instance of ImageReadParam for setting the subsampling factors.
requestedEnvelope - the GeneralEnvelope we are requesting.
requestedDim - the requested dimensions.
Returns:
the index of the raster to read in the underlying data source.
Throws:
IOException
TransformException

decimationOnReadingControl

protected final void decimationOnReadingControl(Integer imageChoice,
                                                ImageReadParam readP,
                                                double[] requestedRes)
This method is responsible for evaluating possible subsampling factors once the best resolution level has been found, in case we have support for overviews, or starting from the original coverage in case there are no overviews available. Anyhow this method should not be called directly but subclasses should make use of the setReadParams method instead in order to transparently look for overviews.

Parameters:
imageChoice -
readP -
requestedRes -

createImageCoverage

protected final GridCoverage createImageCoverage(PlanarImage image)
                                          throws IOException
Creates a GridCoverage for the provided PlanarImage using the originalEnvelope that was provided for this coverage.

Parameters:
image - contains the data for the coverage to create.
Returns:
a GridCoverage
Throws:
IOException

createImageCoverage

protected final GridCoverage2D createImageCoverage(PlanarImage image,
                                                   MathTransform raster2Model)
                                            throws IOException
Creates a GridCoverage for the provided PlanarImage using the raster2Model that was provided for this coverage.

This method is vital when working with coverages that have a raster to model transformation that is not a simple scale and translate.

Parameters:
image - contains the data for the coverage to create.
raster2Model - is the MathTransform that maps from the raster space to the model space.
Returns:
a GridCoverage
Throws:
IOException

getResolution

protected static final double[] getResolution(GeneralEnvelope envelope,
                                              Rectangle2D dim,
                                              CoordinateReferenceSystem crs)
                                       throws DataSourceException
This method is responsible for computing the resolutions in for the provided grid geometry in the provided crs.

It is worth to note that the returned resolution array is of length of 2 and it always is lon, lat for the moment.
It might be worth to remove the axes reordering code when we are confident enough with the code to handle the north-up crs.

TODO use orthodromic distance?

Parameters:
envelope - the GeneralEnvelope
dim -
crs -
Throws:
DataSourceException

getCrs

public final CoordinateReferenceSystem getCrs()
Retrieves the CoordinateReferenceSystem for dataset pointed by this AbstractGridCoverage2DReader.

Returns:
the CoordinateReferenceSystem for dataset pointed by this AbstractGridCoverage2DReader.

getOriginalGridRange

public final GridEnvelope getOriginalGridRange()
Retrieves the GeneralGridRange that represents the raster grid dimensions of the highest resolution level in this dataset.

Returns:
the GeneralGridRange that represents the raster grid dimensions of the highest resolution level in this dataset.

getOriginalEnvelope

public final GeneralEnvelope getOriginalEnvelope()
Retrieves the GeneralEnvelope for this AbstractGridCoverage2DReader.

Returns:
the GeneralEnvelope for this AbstractGridCoverage2DReader.

getOriginalGridToWorld

public final MathTransform getOriginalGridToWorld(PixelInCell pixInCell)
Retrieves the original grid to world transformation for this AbstractGridCoverage2DReader.

Parameters:
pixInCell - specifies the datum of the transformation we want.
Returns:
the original grid to world transformation for this AbstractGridCoverage2DReader.

getSource

public final Object getSource()
Retrieves the source for this AbstractGridCoverage2DReader.

Specified by:
getSource in interface GridCoverageReader
Returns:
the source for this AbstractGridCoverage2DReader.

dispose

public void dispose()
Disposes this reader.

This method just tries to close the underlying ImageInputStream.

Specified by:
dispose in interface GridCoverageReader

skip

public void skip()
Specified by:
skip in interface GridCoverageReader
See Also:
GridCoverageReader.skip()

hasMoreGridCoverages

public boolean hasMoreGridCoverages()
Specified by:
hasMoreGridCoverages in interface GridCoverageReader
See Also:
GridCoverageReader.hasMoreGridCoverages()

listSubNames

public String[] listSubNames()
Specified by:
listSubNames in interface GridCoverageReader
See Also:
GridCoverageReader.listSubNames()

getCurrentSubname

public String getCurrentSubname()
Specified by:
getCurrentSubname in interface GridCoverageReader
See Also:
GridCoverageReader.getCurrentSubname()

getMetadataNames

public String[] getMetadataNames()
Specified by:
getMetadataNames in interface GridCoverageReader
See Also:
GridCoverageReader.getMetadataNames()

getMetadataValue

public String getMetadataValue(String name)
Specified by:
getMetadataValue in interface GridCoverageReader
See Also:
GridCoverageReader.getMetadataValue(java.lang.String)

getGridCoverageCount

public int getGridCoverageCount()
See Also:
org.opengis.coverage.grid.GridCoverageReader#getGridCoverageCount()

getInfo

public ServiceInfo getInfo()
Information about this source.

Subclasses should provide additional format specific information.

Returns:
ServiceInfo describing getSource().

finalize

protected void finalize()
                 throws Throwable
Forcing disposal of this AbstractGridCoverage2DReader which may keep an ImageInputStream open.

Overrides:
finalize in class Object
Throws:
Throwable


Copyright © 1996-2010 Geotools. All Rights Reserved.