001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2008-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.style;
033    
034    import org.opengis.annotation.Extension;
035    import org.opengis.annotation.XmlElement;
036    import org.opengis.filter.expression.Expression;
037    
038    
039    /**
040     * A PointPlacement specifies how a text label is positioned relative to a
041     * geometric point.
042     *
043     * @version <A HREF="http://www.opengeospatial.org/standards/symbol">Symbology Encoding Implementation Specification 1.1.0</A>
044     * @author Open Geospatial Consortium
045     * @author Johann Sorel (Geomatys)
046     * @author Ian Turton
047     * @since GeoAPI 2.2
048     */
049    @XmlElement("PointPlacement")
050    public interface PointPlacement extends LabelPlacement {
051    
052        /**
053         * The AnchorPoint element of a PointPlacement gives the location inside of a label to use
054         * for anchoring the label to the main-geometry point.
055         *
056         * This will often be used to avoid over-plotting a graphic symbol marking a city or some
057         * such feature. The displacements are in units of pixels above and to the right of the point.
058         * A system may reflect this displacement about the X and/or Y axes to de-conflict labels.
059         * The default displacement is X=0, Y=0.
060         *
061         * See {@link AnchorPoint} for details.
062         *
063         * @return AnchorPoint : if null use X=0.5 Y=0.5
064         */
065        @XmlElement("PointPlacement")
066        AnchorPoint getAnchorPoint();
067    
068        /**
069         * The Displacement gives the X and Y displacements from the "hot-spot" point. This
070         * element may be used to avoid over-plotting of multiple graphic symbols used as part of
071         * the same point symbol. The displacements are in units of measure above and to the right
072         * of the point. The default displacement is X=0, Y=0.
073         *
074         * If Displacement is used in conjunction with Size and/or Rotation then the graphic
075         * symbol shall be scaled and/or rotated before it is displaced.s
076         *
077         * @return Displacement
078         */
079        @XmlElement("Displacement")
080        Displacement getDisplacement();
081    
082        /**
083         * Returns the expression that will be used to calculate the rotation of the
084         * graphic when it is drawn.
085         *
086         * The Rotation of a PointPlacement gives the clockwise rotation of the label in degrees
087         * from the normal direction for a font (left-to-right for Latin-derived human languages at
088         * least).
089         *
090         * @return Expression
091         */
092        @XmlElement("Rotation")
093        Expression getRotation();
094    
095        /**
096         * calls the visit method of a StyleVisitor
097         *
098         * @param visitor the style visitor
099         */
100        @Extension
101        Object accept(StyleVisitor visitor, Object extraData);
102    
103    }