Class TiePointGrid

  • All Implemented Interfaces:
    Extensible, Scaling, SceneTransformProvider

    public class TiePointGrid
    extends RasterDataNode
    A tie-point grid contains the data for geophysical parameter in remote sensing data products. Tie-point grid are two-dimensional images which hold their pixel values (samples) in a float array.

    Usually, tie-point grids are a sub-sampling of a data product's scene resolution.

    • Field Detail

      • DISCONT_AUTO

        public static final int DISCONT_AUTO
        The discontinuity of the tie point values shall be detected automatically.
        See Also:
        Constant Field Values
      • DISCONT_NONE

        public static final int DISCONT_NONE
        Tie point values are assumed to have none discontinuities.
        See Also:
        Constant Field Values
      • DISCONT_AT_180

        public static final int DISCONT_AT_180
        Tie point values have angles in the range -180...+180 degrees and may comprise a discontinuity at 180 (resp. -180) degrees.
        See Also:
        Constant Field Values
      • DISCONT_AT_360

        public static final int DISCONT_AT_360
        Tie point values have are angles in the range 0...+360 degrees and may comprise a discontinuity at 360 (resp. 0) degrees.
        See Also:
        Constant Field Values
    • Constructor Detail

      • TiePointGrid

        public TiePointGrid​(String name,
                            int gridWidth,
                            int gridHeight,
                            double offsetX,
                            double offsetY,
                            double subSamplingX,
                            double subSamplingY)
        Constructs a new TiePointGrid with the given tie point grid properties.
        Parameters:
        name - the name of the new object
        gridWidth - the width of the tie-point grid in pixels
        gridHeight - the height of the tie-point grid in pixels
        offsetX - the X co-ordinate of the first (upper-left) tie-point in pixels
        offsetY - the Y co-ordinate of the first (upper-left) tie-point in pixels
        subSamplingX - the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to. Must not be less than one.
        subSamplingY - the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to. Must not be less than one.
      • TiePointGrid

        public TiePointGrid​(String name,
                            int gridWidth,
                            int gridHeight,
                            double offsetX,
                            double offsetY,
                            double subSamplingX,
                            double subSamplingY,
                            float[] tiePoints)
        Constructs a new TiePointGrid with the given tie point grid properties.
        Parameters:
        name - the name of the new object
        gridWidth - the width of the tie-point grid in pixels
        gridHeight - the height of the tie-point grid in pixels
        offsetX - the X co-ordinate of the first (upper-left) tie-point in pixels
        offsetY - the Y co-ordinate of the first (upper-left) tie-point in pixels
        subSamplingX - the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to. Must not be less than one.
        subSamplingY - the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to. Must not be less than one.
        tiePoints - the tie-point data values, must be an array of the size gridWidth * gridHeight
      • TiePointGrid

        public TiePointGrid​(String name,
                            int gridWidth,
                            int gridHeight,
                            double offsetX,
                            double offsetY,
                            double subSamplingX,
                            double subSamplingY,
                            float[] tiePoints,
                            boolean containsAngles)
        Constructs a new TiePointGrid with the given tie point grid properties.
        Parameters:
        name - the name of the new object
        gridWidth - the width of the tie-point grid in pixels
        gridHeight - the height of the tie-point grid in pixels
        offsetX - the X co-ordinate of the first (upper-left) tie-point in pixels
        offsetY - the Y co-ordinate of the first (upper-left) tie-point in pixels
        subSamplingX - the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to. Must not be less than one.
        subSamplingY - the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to. Must not be less than one.
        tiePoints - the tie-point data values, must be an array of the size gridWidth * gridHeight
        containsAngles - if true, the angular discontinuity is derived from the provided tie-point data values
      • TiePointGrid

        public TiePointGrid​(String name,
                            int gridWidth,
                            int gridHeight,
                            double offsetX,
                            double offsetY,
                            double subSamplingX,
                            double subSamplingY,
                            float[] tiePoints,
                            int discontinuity)
        Constructs a new TiePointGrid with the given tie point grid properties.
        Parameters:
        name - the name of the new object
        gridWidth - the width of the tie-point grid in pixels
        gridHeight - the height of the tie-point grid in pixels
        offsetX - the X co-ordinate of the first (upper-left) tie-point in pixels
        offsetY - the Y co-ordinate of the first (upper-left) tie-point in pixels
        subSamplingX - the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to. Must not be less than one.
        subSamplingY - the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to. Must not be less than one.
        tiePoints - the tie-point data values, must be an array of the size gridWidth * gridHeight
        discontinuity - the discontinuity mode, can be either DISCONT_NONE, DISCONT_AUTO, DISCONT_AT_180 or DISCONT_AT_360
    • Method Detail

      • getGridWidth

        public int getGridWidth()
        Returns:
        The grid's width (= number of columns).
      • getGridHeight

        public int getGridHeight()
        Returns:
        The grid's height (= number of rows).
      • getOffsetX

        public double getOffsetX()
        Retrieves the x co-ordinate of the first (upper-left) tie-point in pixels.
      • getOffsetY

        public double getOffsetY()
        Retrieves the y co-ordinate of the first (upper-left) tie-point in pixels.
      • getSubSamplingX

        public double getSubSamplingX()
        Returns the sub-sampling in X-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        Returns:
        the sub-sampling in X-direction, never less than one.
      • getSubSamplingY

        public double getSubSamplingY()
        Returns the sub-sampling in Y-direction given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        Returns:
        the sub-sampling in Y-direction, never less than one.
      • getTiePoints

        public float[] getTiePoints()
        Returns:
        The data array representing the single tie-points.
      • getGridData

        public ProductData getGridData()
        Returns:
        The data buffer representing the single tie-points.
      • getRasterWidth

        public int getRasterWidth()
        Specified by:
        getRasterWidth in class RasterDataNode
        Returns:
        The native width of the raster in pixels.
      • getRasterHeight

        public int getRasterHeight()
        Specified by:
        getRasterHeight in class RasterDataNode
        Returns:
        The native height of the raster in pixels.
      • getDiscontinuity

        public static int getDiscontinuity​(float[] tiePoints)
        Determines the angular discontinuity of the given tie point values.
        Returns:
        the angular discontinuity, will always be either DISCONT_AT_180 or DISCONT_AT_360
      • getGeophysicalDataType

        public int getGeophysicalDataType()
        Returns the geophysical data type of this RasterDataNode. The value returned is always one of the ProductData.TYPE_XXX constants.
        Overrides:
        getGeophysicalDataType in class RasterDataNode
        Returns:
        the geophysical data type
        See Also:
        ProductData
      • getPixelInt

        public int getPixelInt​(int x,
                               int y)
        Gets the interpolated sample for the pixel located at (x,y) as an integer value.

        If the pixel co-ordinates given by (x,y) are not covered by this tie-point grid, the method extrapolates.

        Specified by:
        getPixelInt in class RasterDataNode
        Parameters:
        x - The X co-ordinate of the pixel location
        y - The Y co-ordinate of the pixel location
        Returns:
        the pixel value at (x,y)
        Throws:
        ArrayIndexOutOfBoundsException - if the co-ordinates are not in bounds
      • dispose

        public void dispose()
        Description copied from class: RasterDataNode
        Releases all of the resources used by this object instance and all of its owned children. Its primary use is to allow the garbage collector to perform a vanilla job.

        This method should be called only if it is for sure that this object instance will never be used again. The results of referencing an instance of this class after a call to dispose() are undefined.

        Overrides of this method should always call super.dispose(); after disposing this instance.

        Overrides:
        dispose in class RasterDataNode
      • getPixelFloat

        public float getPixelFloat​(int x,
                                   int y)
        Computes the interpolated sample for the pixel located at (x,y).

        If the pixel co-ordinates given by (x,y) are not covered by this tie-point grid, the method extrapolates.

        Specified by:
        getPixelFloat in class RasterDataNode
        Parameters:
        x - The X co-ordinate of the pixel location, given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        y - The Y co-ordinate of the pixel location, given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        Returns:
        the pixel value at (x,y)
        Throws:
        ArrayIndexOutOfBoundsException - if the co-ordinates are not in bounds
      • getPixelFloat

        public final float getPixelFloat​(float x,
                                         float y)
        Computes the interpolated sample for the pixel located at (x,y) given as floating point co-ordinates.

        If the pixel co-ordinates given by (x,y) are not covered by this tie-point grid, the method extrapolates.

        Parameters:
        x - The X co-ordinate of the pixel location, given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        y - The Y co-ordinate of the pixel location, given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        Throws:
        ArrayIndexOutOfBoundsException - if the co-ordinates are not in bounds
      • getPixelDouble

        public double getPixelDouble​(int x,
                                     int y)
        Gets the interpolated sample for the pixel located at (x,y) as a double value.

        If the pixel co-ordinates given by (x,y) are not covered by this tie-point grid, the method extrapolates.

        Specified by:
        getPixelDouble in class RasterDataNode
        Parameters:
        x - The X co-ordinate of the pixel location, given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        y - The Y co-ordinate of the pixel location, given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        Returns:
        the pixel value at (x,y)
        Throws:
        ArrayIndexOutOfBoundsException - if the co-ordinates are not in bounds
      • getPixelDouble

        public double getPixelDouble​(double x,
                                     double y)
        Gets the interpolated sample for the pixel located at (x,y) as a double value.

        If the pixel co-ordinates given by (x,y) are not covered by this tie-point grid, the method extrapolates.

        Parameters:
        x - The X co-ordinate of the pixel location, given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        y - The Y co-ordinate of the pixel location, given in the pixel co-ordinates of the data product to which this tie-point grid belongs to.
        Throws:
        ArrayIndexOutOfBoundsException - if the co-ordinates are not in bounds
      • setPixelInt

        public void setPixelInt​(int x,
                                int y,
                                int pixelValue)
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        setPixelInt in class RasterDataNode
        Parameters:
        x - the X co-ordinate of the pixel location
        y - the Y co-ordinate of the pixel location
        pixelValue - the new pixel value at (x,y)
      • setPixelFloat

        public void setPixelFloat​(int x,
                                  int y,
                                  float pixelValue)
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        setPixelFloat in class RasterDataNode
        Parameters:
        x - the X co-ordinate of the pixel location
        y - the Y co-ordinate of the pixel location
        pixelValue - the new pixel value at (x,y)
      • setPixelDouble

        public void setPixelDouble​(int x,
                                   int y,
                                   double pixelValue)
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        setPixelDouble in class RasterDataNode
        Parameters:
        x - the X co-ordinate of the pixel location
        y - the Y co-ordinate of the pixel location
        pixelValue - the new pixel value at (x,y)
      • getPixels

        public int[] getPixels​(int x,
                               int y,
                               int w,
                               int h,
                               int[] pixels,
                               ProgressMonitor pm)
        Retrieves an array of tie point data interpolated to the product with and height as integer array. If the given array is null a new one was created and returned.
        Specified by:
        getPixels in class RasterDataNode
        Parameters:
        x - the x coordinate of the array to be read
        y - the y coordinate of the array to be read
        w - the width of the array to be read
        h - the height of the array to be read
        pixels - the integer array to be filled with data
        pm - a monitor to inform the user about progress
        Throws:
        IllegalArgumentException - if the length of the given array is less than w*h.
      • getPixels

        public double[] getPixels​(int x,
                                  int y,
                                  int w,
                                  int h,
                                  double[] pixels,
                                  ProgressMonitor pm)
        Retrieves an array of tie point data interpolated to the product width and height as float array. If the given array is null a new one is created and returned.
        Specified by:
        getPixels in class RasterDataNode
        Parameters:
        x - the x coordinate of the array to be read
        y - the y coordinate of the array to be read
        w - the width of the array to be read
        h - the height of the array to be read
        pixels - the float array to be filled with data
        pm - a monitor to inform the user about progress
        Throws:
        IllegalArgumentException - if the length of the given array is less than w*h.
      • getPixels

        public float[] getPixels​(int x,
                                 int y,
                                 int w,
                                 int h,
                                 float[] pixels,
                                 ProgressMonitor pm)
        Retrieves an array of tie point data interpolated to the product with and height as double array. If the given array is null a new one was created and returned.
        Specified by:
        getPixels in class RasterDataNode
        Parameters:
        x - the x coordinate of the array to be read
        y - the y coordinate of the array to be read
        w - the width of the array to be read
        h - the height of the array to be read
        pixels - the double array to be filled with data
        pm - a progress monitor
        Throws:
        IllegalArgumentException - if the length of the given array is less than w*h.
      • setPixels

        public void setPixels​(int x,
                              int y,
                              int w,
                              int h,
                              int[] pixels)
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        setPixels in class RasterDataNode
        Parameters:
        x - x offset into the band
        y - y offset into the band
        w - width of the pixel array to be written
        h - height of the pixel array to be written.
        pixels - integer array to be written
      • setPixels

        public void setPixels​(int x,
                              int y,
                              int w,
                              int h,
                              float[] pixels)
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        setPixels in class RasterDataNode
        Parameters:
        x - x offset into the band
        y - y offset into the band
        w - width of the pixel array to be written
        h - height of the pixel array to be written.
        pixels - float array to be written
      • setPixels

        public void setPixels​(int x,
                              int y,
                              int w,
                              int h,
                              double[] pixels)
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        setPixels in class RasterDataNode
        Parameters:
        x - x offset into the band
        y - y offset into the band
        w - width of the pixel array to be written
        h - height of the pixel array to be written.
        pixels - double array to be written
      • readPixels

        public int[] readPixels​(int x,
                                int y,
                                int w,
                                int h,
                                int[] pixels,
                                ProgressMonitor pm)
                         throws IOException
        Retrieves an array of tie point data interpolated to the product with and height as float array. If the given array is null a new one was created and returned.
        Specified by:
        readPixels in class RasterDataNode
        Parameters:
        x - the x coordinate of the array to be read
        y - the y coordinate of the array to be read
        w - the width of the array to be read
        h - the height of the array to be read
        pixels - the integer array to be filled with data
        pm - a progress monitor
        Returns:
        the pixels read
        Throws:
        IllegalArgumentException - if the length of the given array is less than w*h.
        IOException - if an /IO error occurs
      • readPixels

        public float[] readPixels​(int x,
                                  int y,
                                  int w,
                                  int h,
                                  float[] pixels,
                                  ProgressMonitor pm)
                           throws IOException
        Retrieves an array of tie point data interpolated to the product with and height as float array. If the given array is null a new one was created and returned. *
        Specified by:
        readPixels in class RasterDataNode
        Parameters:
        x - the x coordinate of the array to be read
        y - the y coordinate of the array to be read
        w - the width of the array to be read
        h - the height of the array to be read
        pixels - the float array to be filled with data
        pm - a monitor to inform the user about progress
        Returns:
        the pixels read
        Throws:
        IllegalArgumentException - if the length of the given array is less than w*h.
        IOException
      • readPixels

        public double[] readPixels​(int x,
                                   int y,
                                   int w,
                                   int h,
                                   double[] pixels,
                                   ProgressMonitor pm)
                            throws IOException
        Retrieves an array of tie point data interpolated to the product with and height as double array. If the given array is null a new one was created and returned.
        Specified by:
        readPixels in class RasterDataNode
        Parameters:
        x - the x coordinate of the array to be read
        y - the y coordinate of the array to be read
        w - the width of the array to be read
        h - the height of the array to be read
        pixels - the double array to be filled with data
        pm - a monitor to inform the user about progress
        Returns:
        the pixels read
        Throws:
        IllegalArgumentException - if the length of the given array is less than w*h.
        IOException
      • writePixels

        public void writePixels​(int x,
                                int y,
                                int w,
                                int h,
                                int[] pixels,
                                ProgressMonitor pm)
                         throws IOException
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        writePixels in class RasterDataNode
        Parameters:
        x - x offset into the band
        y - y offset into the band
        w - width of the pixel array to be written
        h - height of the pixel array to be written
        pixels - array of pixels to write
        pm - a progress monitor
        Throws:
        IOException - if an I/O error occurs
      • writePixels

        public void writePixels​(int x,
                                int y,
                                int w,
                                int h,
                                float[] pixels,
                                ProgressMonitor pm)
                         throws IOException
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        writePixels in class RasterDataNode
        Parameters:
        x - x offset into the band
        y - y offset into the band
        w - width of the pixel array to be written
        h - height of the pixel array to be written
        pixels - array of pixels to write
        pm - a progress monitor
        Throws:
        IOException - if an I/O error occurs
      • writePixels

        public void writePixels​(int x,
                                int y,
                                int w,
                                int h,
                                double[] pixels,
                                ProgressMonitor pm)
                         throws IOException
        This method is not implemented because pixels are read-only in tie-point grids.
        Specified by:
        writePixels in class RasterDataNode
        Parameters:
        x - x offset into the band
        y - y offset into the band
        w - width of the pixel array to be written
        h - height of the pixel array to be written
        pixels - array of pixels to write
        pm - a progress monitor
        Throws:
        IOException - if an I/O error occurs
      • readRasterData

        public void readRasterData​(int offsetX,
                                   int offsetY,
                                   int width,
                                   int height,
                                   ProductData rasterData,
                                   ProgressMonitor pm)
                            throws IOException
        Reads raster data from this dataset into the user-supplied raster data buffer.

        This method always directly (re-)reads this tie-point grid's data from its associated data source into the given data buffer.

        Specified by:
        readRasterData in class RasterDataNode
        Parameters:
        offsetX - the X-offset in the raster co-ordinates where reading starts
        offsetY - the Y-offset in the raster co-ordinates where reading starts
        width - the width of the raster data buffer
        height - the height of the raster data buffer
        rasterData - a raster data buffer receiving the pixels to be read
        pm - a monitor to inform the user about progress
        Throws:
        IOException - if an I/O error occurs
        IllegalArgumentException - if the raster is null
        IllegalStateException - if this product raster was not added to a product so far, or if the product to which this product raster belongs to, has no associated product reader
        See Also:
        ProductReader.readBandRasterData(Band, int, int, int, int, ProductData, com.bc.ceres.core.ProgressMonitor)
      • writeRasterData

        public void writeRasterData​(int offsetX,
                                    int offsetY,
                                    int width,
                                    int height,
                                    ProductData rasterData,
                                    ProgressMonitor pm)
                             throws IOException
        Writes data from this product raster into the specified region of the user-supplied raster.

        It is important to know that this method does not change this product raster's internal state nor does it write into this product raster's internal raster.

        Specified by:
        writeRasterData in class RasterDataNode
        Parameters:
        offsetX - the X-offset in raster co-ordinates where reading starts
        offsetY - the Y-offset in raster co-ordinates where reading starts
        width - the width of the raster data buffer
        height - the height of the raster data buffer
        rasterData - a raster data buffer receiving the pixels to be read
        pm - a monitor to inform the user about progress
        Throws:
        IOException - if an I/O error occurs
        See Also:
        ProductReader.readBandRasterData(Band, int, int, int, int, ProductData, com.bc.ceres.core.ProgressMonitor)
      • createSourceImage

        protected RenderedImage createSourceImage()
        Description copied from class: RasterDataNode
        Creates the source image associated with this RasterDataNode. This shall preferably be a MultiLevelImage instance which recognises this raster data node's {@link ##getImageToModelTransform() imageToModelTransform} property, if set.
        Specified by:
        createSourceImage in class RasterDataNode
        Returns:
        A new source image instance.
      • acceptVisitor

        public void acceptVisitor​(ProductVisitor visitor)
        Accepts the given visitor. This method implements the well known 'Visitor' design pattern of the gang-of-four. The visitor pattern allows to define new operations on the product data model without the need to add more code to it. The new operation is implemented by the visitor.

        The method simply calls visitor.visit(this).

        Specified by:
        acceptVisitor in class RasterDataNode
        Parameters:
        visitor - the visitor
      • cloneTiePointGrid

        public TiePointGrid cloneTiePointGrid()
      • createZenithFromElevationAngleTiePointGrid

        public static TiePointGrid createZenithFromElevationAngleTiePointGrid​(TiePointGrid elevationAngleGrid)
      • ensureMinLengthArray

        protected static int[] ensureMinLengthArray​(int[] array,
                                                    int length)
      • ensureMinLengthArray

        protected static float[] ensureMinLengthArray​(float[] array,
                                                      int length)
      • ensureMinLengthArray

        protected static double[] ensureMinLengthArray​(double[] array,
                                                       int length)