001/*
002 *    GeoAPI - Java interfaces for OGC/ISO standards
003 *    Copyright © 2004-2023 Open Geospatial Consortium, Inc.
004 *    http://www.geoapi.org
005 *
006 *    Licensed under the Apache License, Version 2.0 (the "License");
007 *    you may not use this file except in compliance with the License.
008 *    You may obtain a copy of the License at
009 *
010 *        http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *    Unless required by applicable law or agreed to in writing, software
013 *    distributed under the License is distributed on an "AS IS" BASIS,
014 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 *    See the License for the specific language governing permissions and
016 *    limitations under the License.
017 */
018package org.opengis.metadata.content;
019
020import org.opengis.metadata.Identifier;
021import org.opengis.annotation.UML;
022
023import static org.opengis.annotation.Obligation.*;
024import static org.opengis.annotation.Specification.*;
025
026
027/**
028 * Information about an image's suitability for use.
029 *
030 * @author  Martin Desruisseaux (IRD)
031 * @author  Cory Horner (Refractions Research)
032 * @author  Rémi Maréchal (Geomatys)
033 * @version 3.1
034 * @since   2.0
035 */
036@UML(identifier="MD_ImageDescription", specification=ISO_19115)
037public interface ImageDescription extends CoverageDescription {
038    /**
039     * Illumination elevation measured in degrees clockwise from the target plane
040     * at intersection of the optical line of sight with the planet's surface.
041     * For images from a scanning device, refer to the centre pixel of the image.
042     *
043     * @return a value between -90° and +90°, or {@code null} if unspecified.
044     */
045    @UML(identifier="illuminationElevationAngle", obligation=OPTIONAL, specification=ISO_19115)
046    default Double getIlluminationElevationAngle() {
047        return null;
048    }
049
050    /**
051     * Illumination azimuth measured in degrees clockwise from true north at the time the
052     * image is taken. For images from a scanning device, refer to the centre pixel of the image.
053     *
054     * @return a value between 0° and 360°, or {@code null} if unspecified.
055     */
056    @UML(identifier="illuminationAzimuthAngle", obligation=OPTIONAL, specification=ISO_19115)
057    default Double getIlluminationAzimuthAngle() {
058        return null;
059    }
060
061    /**
062     * Conditions which affected the image.
063     *
064     * @return conditions which affected the image, or {@code null} if unspecified.
065     */
066    @UML(identifier="imagingCondition", obligation=OPTIONAL, specification=ISO_19115)
067    default ImagingCondition getImagingCondition() {
068        return null;
069    }
070
071    /**
072     * Code in producer’s codespace that specifies the image quality.
073     *
074     * @return the image quality, or {@code null} if unspecified.
075     */
076    @UML(identifier="imageQualityCode", obligation=OPTIONAL, specification=ISO_19115)
077    default Identifier getImageQualityCode() {
078        return null;
079    }
080
081    /**
082     * Area of the dataset obscured by clouds, expressed as a percentage of the spatial extent.
083     *
084     * @return a value between 0 and 100, or {@code null} if unspecified.
085     */
086    @UML(identifier="cloudCoverPercentage", obligation=OPTIONAL, specification=ISO_19115)
087    default Double getCloudCoverPercentage() {
088        return null;
089    }
090
091    /**
092     * Count of the number of lossy compression cycles performed on the image.
093     * Returns {@code null} if the information is not provided.
094     *
095     * @return the number of lossy compression cycles performed on the image,
096     *         or {@code null} if unspecified.
097     */
098    @UML(identifier="compressionGenerationQuantity", obligation=OPTIONAL, specification=ISO_19115)
099    default Integer getCompressionGenerationQuantity() {
100        return null;
101    }
102
103    /**
104     * Indication of whether or not triangulation has been performed upon the image.
105     * Returns {@code null} if the information is not provided.
106     *
107     * @return whether or not triangulation has been performed upon the image,
108     *         or {@code null} if unspecified.
109     */
110    @UML(identifier="triangulationIndicator", obligation=OPTIONAL, specification=ISO_19115)
111    default Boolean getTriangulationIndicator() {
112        return null;
113    }
114
115    /**
116     * Indication of whether or not the radiometric calibration information for generating the
117     * radiometrically calibrated standard data product is available.
118     *
119     * @return whether or not the radiometric calibration information is available,
120     *         or {@code null} if unspecified.
121     */
122    @UML(identifier="radiometricCalibrationDataAvailability", obligation=OPTIONAL, specification=ISO_19115)
123    default Boolean isRadiometricCalibrationDataAvailable() {
124        return null;
125    }
126
127    /**
128     * Indication of whether or not constants are available which allow for camera calibration corrections.
129     *
130     * @return whether or not constants are available for camera calibration corrections,
131     *         or {@code null} if unspecified.
132     */
133    @UML(identifier="cameraCalibrationInformationAvailability", obligation=OPTIONAL, specification=ISO_19115)
134    default Boolean isCameraCalibrationInformationAvailable() {
135        return null;
136    }
137
138    /**
139     * Indication of whether or not Calibration Reseau information is available.
140     *
141     * @return whether or not Calibration Reseau information is available,
142     *         or {@code null} if unspecified.
143     */
144    @UML(identifier="filmDistortionInformationAvailability", obligation=OPTIONAL, specification=ISO_19115)
145    default Boolean isFilmDistortionInformationAvailable() {
146        return null;
147    }
148
149    /**
150     * Indication of whether or not lens aberration correction information is available.
151     *
152     * @return whether or not lens aberration correction information is available,
153     *         or {@code null} if unspecified.
154     */
155    @UML(identifier="lensDistortionInformationAvailability", obligation=OPTIONAL, specification=ISO_19115)
156    default Boolean isLensDistortionInformationAvailable() {
157        return null;
158    }
159}