001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2006-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    // This class was created by Sanjay Jena and Prof. Jackson Roehrig in order to complete
033    // missing parts of the GeoAPI and submit the results to GeoAPI afterwards as proposal.
034    
035    package org.opengis.geometry.aggregate;
036    
037    import java.util.Set;
038    import org.opengis.geometry.DirectPosition;
039    import org.opengis.geometry.primitive.OrientableSurface;
040    import org.opengis.annotation.UML;
041    
042    import static org.opengis.annotation.Obligation.*;
043    import static org.opengis.annotation.Specification.*;
044    
045    
046    /**
047     * An aggregate class containing only instances of {@link OrientableSurface}.
048     * The association role {@link #getElements element} shall be the set of
049     * {@linkplain OrientableSurface orientable surfaces} contained in this {@code MultiSurface}.
050     *
051     * @version <A HREF="http://www.opengeospatial.org/standards/as">ISO 19107</A>
052     * @author Sanjay Jena
053     * @author Prof. Dr. Jackson Roehrig
054     * @since GeoAPI 2.1
055     */
056    @UML(identifier="GM_MultiSurface", specification=ISO_19107)
057    public interface MultiSurface extends MultiPrimitive {
058        /**
059         * Returns the set containing the {@linkplain OrientableSurface orientable surfaces}
060         * that compose this {@code MultiSurface}. The set may be modified if this geometry
061         * {@linkplain #isMutable is mutable}.
062         */
063        @UML(identifier="element", obligation=MANDATORY, specification=ISO_19107)
064        Set<OrientableSurface> getElements();
065    
066        /**
067         * Returns the accumulated area of all {@linkplain OrientableSurface orientable surfaces}
068         * contained in this {@code MultiSurface}. The area of a 2-dimensional geometric object
069         * shall be a numeric measure of its surface area (in a square unit of distance). Since
070         * area is an accumulation (integral) of the product of two distances, its return value
071         * shall be in a unit of measure appropriate for measuring distances squared, such as
072         * meters squared (m<sup>2</sup>).
073         *
074         * <blockquote><font size=2>
075         * <strong>NOTE:</strong> Consistent with the definition of surface as a set of
076         * {@linkplain DirectPosition direct positions}, holes in the surfaces will not contribute to
077         * the total area. If the usual Green's Theorem (or more general Stokes' Theorem) integral is
078         * used, the integral around the holes in the surface are subtracted from the integral
079         * about the exterior of the surface patch.
080         * </font></blockquote>
081         *
082         * @return The area.
083         * @unitof Area
084         */
085        @UML(identifier="area", obligation=MANDATORY, specification=ISO_19107)
086        double getArea();
087    }