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.referencing.cs;
033    
034    import java.util.Map;
035    import javax.measure.unit.Unit;
036    import org.opengis.referencing.IdentifiedObject;
037    import org.opengis.annotation.UML;
038    
039    import static org.opengis.annotation.Obligation.*;
040    import static org.opengis.annotation.Specification.*;
041    
042    
043    /**
044     * Definition of a coordinate system axis.
045     * See <A HREF="package-summary.html#AxisNames">axis name constraints</A>.
046     *
047     * @author  Martin Desruisseaux (IRD)
048     * @version 3.0
049     * @since   1.0
050     *
051     * @navassoc 1 - - AxisDirection
052     * @navassoc 1 - - RangeMeaning
053     * @navassoc 1 - - Unit
054     *
055     * @see CoordinateSystem
056     * @see CSAuthorityFactory#createCoordinateSystemAxis(String)
057     * @see CSFactory#createCoordinateSystemAxis(Map, String, AxisDirection, Unit)
058     */
059    @UML(identifier="CS_CoordinateSystemAxis", specification=ISO_19111)
060    public interface CoordinateSystemAxis extends IdentifiedObject {
061        /**
062         * The abbreviation used for this coordinate system axes. This abbreviation is also
063         * used to identify the ordinates in coordinate tuple. Examples are "<var>X</var>"
064         * and "<var>Y</var>".
065         *
066         * @return The coordinate system axis abbreviation.
067         */
068        @UML(identifier="axisAbbrev", obligation=MANDATORY, specification=ISO_19111)
069        String getAbbreviation();
070    
071        /**
072         * Direction of this coordinate system axis. In the case of Cartesian projected
073         * coordinates, this is the direction of this coordinate system axis locally.
074         * Examples:
075         * {@linkplain AxisDirection#NORTH north} or {@linkplain AxisDirection#SOUTH south},
076         * {@linkplain AxisDirection#EAST  east}  or {@linkplain AxisDirection#WEST  west},
077         * {@linkplain AxisDirection#UP    up}    or {@linkplain AxisDirection#DOWN  down}.
078         * <p>
079         * Within any set of coordinate system axes, only one of each pair of terms
080         * can be used. For earth-fixed coordinate reference systems, this direction is often
081         * approximate and intended to provide a human interpretable meaning to the axis. When a
082         * geodetic datum is used, the precise directions of the axes may therefore vary slightly
083         * from this approximate direction.
084         * <p>
085         * Note that an {@link org.opengis.referencing.crs.EngineeringCRS} often requires
086         * specific descriptions of the directions of its coordinate system axes.
087         *
088         * @return The coordinate system axis direction.
089         */
090        @UML(identifier="axisDirection", obligation=MANDATORY, specification=ISO_19111)
091        AxisDirection getDirection();
092    
093        /**
094         * Returns the minimum value normally allowed for this axis, in the
095         * {@linkplain #getUnit unit of measure for the axis}. If there is no minimum value, then
096         * this method returns {@linkplain Double#NEGATIVE_INFINITY negative infinity}.
097         *
098         * @return The minimum value, or {@link Double#NEGATIVE_INFINITY} if none.
099         */
100        @UML(identifier="minimumValue", obligation=OPTIONAL, specification=ISO_19111)
101        double getMinimumValue();
102    
103        /**
104         * Returns the maximum value normally allowed for this axis, in the
105         * {@linkplain #getUnit unit of measure for the axis}. If there is no maximum value, then
106         * this method returns {@linkplain Double#POSITIVE_INFINITY positive infinity}.
107         *
108         * @return The maximum value, or {@link Double#POSITIVE_INFINITY} if none.
109         */
110        @UML(identifier="maximumValue", obligation=OPTIONAL, specification=ISO_19111)
111        double getMaximumValue();
112    
113        /**
114         * Returns the meaning of axis value range specified by the {@linkplain #getMinimumValue
115         * minimum} and {@linkplain #getMaximumValue maximum} values. This element shall be omitted
116         * when both minimum and maximum values are omitted. It may be included when minimum and/or
117         * maximum values are included. If this element is omitted when minimum or maximum values are
118         * included, the meaning is unspecified.
119         *
120         * @return The range meaning, or {@code null} in none.
121         *
122         * @see RangeMeaning#EXACT
123         * @see RangeMeaning#WRAPAROUND
124         */
125        @UML(identifier="rangeMeaning", obligation=CONDITIONAL, specification=ISO_19111)
126        RangeMeaning getRangeMeaning();
127    
128        /**
129         * The unit of measure used for this coordinate system axis. The value of a
130         * coordinate in a coordinate tuple shall be recorded using this unit of measure,
131         * whenever those coordinates use a coordinate reference system that uses a
132         * coordinate system that uses this axis.
133         *
134         * @return  The coordinate system axis unit.
135         */
136        @UML(identifier="axisUnitID", obligation=MANDATORY, specification=ISO_19111)
137        Unit<?> getUnit();
138    }