001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2004-2012 Open Geospatial Consortium, Inc.
006     *    All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007     *
008     *    Permission to use, copy, and modify this software and its documentation, with
009     *    or without modification, for any purpose and without fee or royalty is hereby
010     *    granted, provided that you include the following on ALL copies of the software
011     *    and documentation or portions thereof, including modifications, that you make:
012     *
013     *    1. The full text of this NOTICE in a location viewable to users of the
014     *       redistributed or derivative work.
015     *    2. Notice of any changes or modifications to the OGC files, including the
016     *       date changes were made.
017     *
018     *    THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019     *    NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020     *    TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021     *    THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022     *    PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023     *
024     *    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025     *    CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026     *
027     *    The name and trademarks of copyright holders may NOT be used in advertising or
028     *    publicity pertaining to the software without specific, written prior permission.
029     *    Title to copyright in this software and any associated documentation will at all
030     *    times remain with copyright holders.
031     */
032    package org.opengis.coverage.grid;
033    
034    import org.opengis.referencing.datum.PixelInCell;
035    import org.opengis.referencing.operation.MathTransform;
036    import org.opengis.annotation.UML;
037    
038    import static org.opengis.annotation.Obligation.*;
039    import static org.opengis.annotation.Specification.*;
040    
041    
042    /**
043     * Describes the geometry and georeferencing information of the grid coverage.
044     * The {@linkplain #getExtent() extent} attribute determines the valid grid coordinates and allows
045     * for calculation of grid size. A grid coverage may or may not have georeferencing.
046     *
047     * <P>&nbsp;</P>
048     * <TABLE WIDTH="80%" ALIGN="center" CELLPADDING="18" BORDER="4" BGCOLOR="#FFE0B0">
049     *   <TR><TD>
050     *     <P align="justify"><STRONG>WARNING: THIS CLASS WILL CHANGE.</STRONG> Current API is derived from OGC
051     *     <A HREF="http://www.opengis.org/docs/01-004.pdf">Grid Coverages Implementation specification 1.0</A>.
052     *     We plan to replace it by new interfaces derived from ISO 19123 (<CITE>Schema for coverage geometry
053     *     and functions</CITE>). Current interfaces should be considered as legacy and are included in this
054     *     distribution only because they were part of GeoAPI 1.0 release. We will try to preserve as much
055     *     compatibility as possible, but no migration plan has been determined yet.</P>
056     *   </TD></TR>
057     * </TABLE>
058     *
059     * @version <A HREF="http://www.opengis.org/docs/01-004.pdf">Grid Coverage specification 1.0</A>
060     * @author  Martin Desruisseaux (IRD)
061     * @since   GeoAPI 1.0
062     */
063    @UML(identifier="CV_GridGeometry", specification=OGC_01004)
064    public interface GridGeometry {
065        /**
066         * The valid domain of a grid coverage. The {@linkplain GridEnvelope#getLow() lowest} valid grid
067         * coordinate is often (but not always) zero. A grid with 512 cells typically have a minimum
068         * coordinate of 0 and maximum of 512, with 511 as the {@linkplain GridEnvelope#getHigh() highest}
069         * valid index.
070         *
071         * {@note The attribute name in the OGC 01-004 specification was "<code>gridRange</code>", while
072         *        the ISO 19123 specification uses "<code>extent</code>" for similar information. This
073         *        interface uses the ISO name both for consistency with ISO interfaces, and because the
074         *        <cite>range</cite> term is already used by ISO 19123 for a different meaning.}
075         *
076         * @return The valid domain of a grid coverage.
077         *
078         * @see org.opengis.coverage.grid.Grid#getExtent()
079         */
080        @UML(identifier="gridRange", obligation=MANDATORY, specification=OGC_01004)
081        GridEnvelope getExtent();
082    
083        /**
084         * @deprecated Renamed {@link #getExtent()}.
085         */
086        @Deprecated
087        GridEnvelope getGridRange();
088    
089        /**
090         * Returns the conversion from grid coordinates to real world earth coordinates.
091         * The transform is often an affine transform. The coordinate reference system
092         * of the real world coordinates is given by the
093         * {@link org.opengis.coverage.Coverage#getCoordinateReferenceSystem()} method
094         * and maps to {@linkplain PixelInCell#CELL_CENTER pixel center}.
095         *
096         * @return The conversion from grid coordinates to
097         *         {@linkplain org.opengis.coverage.Coverage#getCoordinateReferenceSystem
098         *         real world earth coordinates}.
099         *
100         * @since GeoAPI 2.1
101         */
102        @UML(identifier="gridToCoordinateSystem", obligation=MANDATORY, specification=OGC_01004)
103        MathTransform getGridToCRS();
104    }