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.metadata.content;
033    
034    import javax.measure.quantity.Length;
035    import javax.measure.unit.Unit;
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     * Range of wavelengths in the electromagnetic spectrum.
044     *
045     * @author  Martin Desruisseaux (IRD)
046     * @author  Cory Horner (Refractions Research)
047     * @author  Cédric Briançon (Geomatys)
048     * @version 3.0
049     * @since   2.0
050     *
051     * @navassoc 1 - - Unit
052     * @navassoc 1 - - BandDefinition
053     * @navassoc 1 - - TransferFunctionType
054     * @navassoc - - - PolarizationOrientation
055     */
056    @UML(identifier="MD_Band", specification=ISO_19115)
057    public interface Band extends RangeDimension {
058        /**
059         * Longest wavelength that the sensor is capable of collecting within a designated band.
060         * Returns {@code null} if unspecified.
061         *
062         * @return Longest wavelength that the sensor is capable of collecting within a designated band,
063         *         or {@code null} if unknown. The units of measurement is given by {@link #getUnits()}.
064         */
065        @UML(identifier="maxValue", obligation=OPTIONAL, specification=ISO_19115)
066        Double getMaxValue();
067    
068        /**
069         * Shortest wavelength that the sensor is capable of collecting within a designated band.
070         * Returns {@code null} if unspecified.
071         *
072         * @return Shortest wavelength that the sensor is capable of collecting within a designated band,
073         *         or {@code null} if unknown. The units of measurement is given by {@link #getUnits()}.
074         */
075        @UML(identifier="minValue", obligation=OPTIONAL, specification=ISO_19115)
076        Double getMinValue();
077    
078        /**
079         * Wavelength at which the response is the highest.
080         * Returns {@code null} if unspecified.
081         *
082         * @return Wavelength at which the response is the highest, or {@code null} if unknown.
083         *         The units of measurement is given by {@link #getUnits()}.
084         */
085        @UML(identifier="peakResponse", obligation=OPTIONAL, specification=ISO_19115)
086        Double getPeakResponse();
087    
088        /**
089         * Units in which sensor wavelengths are expressed.
090         *
091         * @return Units in which sensor wavelengths are expressed, or {@code null}.
092         *
093         * @condition {@linkplain #getMinValue min value}, {@linkplain #getMaxValue max value}
094         *            or {@linkplain #getPeakResponse() peak response} is provided.
095         */
096        @UML(identifier="units", obligation=CONDITIONAL, specification=ISO_19115)
097        Unit<Length> getUnits();
098    
099        /**
100         * Maximum number of significant bits in the uncompressed representation for the value
101         * in each band of each pixel.
102         * Returns {@code null} if unspecified.
103         *
104         * @return Maximum number of significant bits in the uncompressed representation, or {@code null}.
105         */
106        @UML(identifier="bitsPerValue", obligation=OPTIONAL, specification=ISO_19115)
107        Integer getBitsPerValue();
108    
109        /**
110         * Number of discrete numerical values in the grid data.
111         * Returns {@code null} if unspecified.
112         *
113         * @return Number of discrete numerical values in the grid data, or {@code null}.
114         */
115        @UML(identifier="toneGradation", obligation=OPTIONAL, specification=ISO_19115)
116        Integer getToneGradation();
117    
118        /**
119         * Scale factor which has been applied to the cell value.
120         * Returns {@code null} if unspecified.
121         *
122         * @return Scale factor which has been applied to the cell value, or {@code null}.
123         */
124        @UML(identifier="scaleFactor", obligation=OPTIONAL, specification=ISO_19115)
125        Double getScaleFactor();
126    
127        /**
128         * The physical value corresponding to a cell value of zero.
129         * Returns {@code null} if unspecified.
130         *
131         * @return The physical value corresponding to a cell value of zero, or {@code null}.
132         */
133        @UML(identifier="offset", obligation=OPTIONAL, specification=ISO_19115)
134        Double getOffset();
135    
136        /**
137         * Designation of criterion for defining maximum and minimum wavelengths for a spectral band.
138         *
139         * @return Criterion for defining maximum and minimum wavelengths.
140         *
141         * @since 2.3
142         */
143        @UML(identifier="bandBoundaryDefinition", obligation=OPTIONAL, specification=ISO_19115_2)
144        BandDefinition getBandBoundaryDefinition();
145    
146        /**
147         * Smallest distance between which separate points can be distinguished, as specified in
148         * instrument design.
149         * <p>
150         * <TABLE WIDTH="80%" ALIGN="center" CELLPADDING="18" BORDER="4" BGCOLOR="#FFE0B0">
151         *   <TR><TD>
152         *     <P align="justify"><B>Warning:</B> The return type of this method may change in GeoAPI
153         *     3.1. It may be replaced by the {@link javax.measure.quantity.Length} type in order to
154         *     provide unit of measurement together with the value.</P>
155         *   </TD></TR>
156         * </TABLE>
157         *
158         * @return Smallest distance between which separate points can be distinguished.
159         * @unitof Distance
160         *
161         * @since 2.3
162         */
163        @UML(identifier="nominalSpatialResolution", obligation=OPTIONAL, specification=ISO_19115_2)
164        Double getNominalSpatialResolution();
165    
166        /**
167         * Type of transfer function to be used when scaling a physical value for a given element.
168         *
169         * @return Type of transfer function.
170         *
171         * @since 2.3
172         */
173        @UML(identifier="transferFunctionType", obligation=OPTIONAL, specification=ISO_19115_2)
174        TransferFunctionType getTransferFunctionType();
175    
176        /**
177         * Polarization of the radiation transmitted.
178         *
179         * @return Polarization of the radiation transmitted.
180         *
181         * @since 2.3
182         */
183        @UML(identifier="transmittedPolarization", obligation=OPTIONAL, specification=ISO_19115_2)
184        PolarizationOrientation getTransmittedPolarization();
185    
186        /**
187         * Polarization of the radiation detected.
188         *
189         * @return Polarization of the radiation detected.
190         *
191         * @since 2.3
192         */
193        @UML(identifier="detectedPolarization", obligation=OPTIONAL, specification=ISO_19115_2)
194        PolarizationOrientation getDetectedPolarization();
195    }