001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.3_testing/src/org/deegree/graphics/sld/PointSymbolizer.java $
002    /*----------------------------------------------------------------------------
003     This file is part of deegree, http://deegree.org/
004     Copyright (C) 2001-2009 by:
005       Department of Geography, University of Bonn
006     and
007       lat/lon GmbH
008    
009     This library is free software; you can redistribute it and/or modify it under
010     the terms of the GNU Lesser General Public License as published by the Free
011     Software Foundation; either version 2.1 of the License, or (at your option)
012     any later version.
013     This library is distributed in the hope that it will be useful, but WITHOUT
014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
016     details.
017     You should have received a copy of the GNU Lesser General Public License
018     along with this library; if not, write to the Free Software Foundation, Inc.,
019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020    
021     Contact information:
022    
023     lat/lon GmbH
024     Aennchenstr. 19, 53177 Bonn
025     Germany
026     http://lat-lon.de/
027    
028     Department of Geography, University of Bonn
029     Prof. Dr. Klaus Greve
030     Postfach 1147, 53001 Bonn
031     Germany
032     http://www.geographie.uni-bonn.de/deegree/
033    
034     e-mail: info@deegree.org
035    ----------------------------------------------------------------------------*/
036    package org.deegree.graphics.sld;
037    
038    import org.deegree.framework.xml.Marshallable;
039    
040    /**
041     * Used to render a "graphic" at a point. If a line-string or polygon geometry is used with this
042     * symbol, then the semantic is to use the centroid of the geometry, or any similar representative
043     * point. The meaning of the contained elements are discussed with the element definitions below. If
044     * the Geometry element is omitted, then the "default" geometry for the feature type is used. (Many
045     * feature types will have only one geometry attribute.) If the Graphic element is omitted, then
046     * nothing will be plotted.
047     * <p>
048     * ----------------------------------------------------------------------
049     * </p>
050     *
051     * @author <a href="mailto:k.lupp@web.de">Katharina Lupp</a>
052     * @version $Revision: 18195 $ $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
053     */
054    
055    public class PointSymbolizer extends AbstractSymbolizer implements Marshallable {
056    
057        private Graphic graphic = null;
058    
059        /**
060         * Creates a new PointSymbolizer object.
061         */
062        public PointSymbolizer() {
063            super( null, "org.deegree.graphics.displayelements.PointDisplayElement" );
064            Stroke stroke = new Stroke();
065            Fill fill = new Fill();
066            Mark mark = new Mark( "square", stroke, fill );
067            graphic = StyleFactory.createGraphic( null, mark, 1, 5, 0 );
068        }
069    
070        /**
071         * constructor initializing the class with the <PointSymbolizer>
072         * @param graphic
073         * @param geometry
074         * @param min
075         * @param max
076         */
077        PointSymbolizer( Graphic graphic, Geometry geometry, double min, double max ) {
078            super( geometry, "org.deegree.graphics.displayelements.PointDisplayElement" );
079    
080            if ( graphic == null ) {
081                graphic = new Graphic();
082            }
083    
084            setGraphic( graphic );
085            setMinScaleDenominator( min );
086            setMaxScaleDenominator( max );
087        }
088    
089        /**
090         * constructor initializing the class with the <PointSymbolizer>
091         * @param graphic
092         * @param geometry
093         * @param responsibleClass
094         * @param min
095         * @param max
096         */
097        PointSymbolizer( Graphic graphic, Geometry geometry, String responsibleClass, double min, double max ) {
098            super( geometry, responsibleClass );
099    
100            if ( graphic == null ) {
101                graphic = new Graphic();
102            }
103    
104            setGraphic( graphic );
105            setMinScaleDenominator( min );
106            setMaxScaleDenominator( max );
107        }
108    
109        /**
110         * A Graphic is a "graphic symbol" with an inherent shape, color, and size. Graphics can either
111         * be referenced from an external URL in a common format (such as GIF or SVG) or may be derived
112         * from a Mark. Multiple external URLs may be referenced with the semantic that they all provide
113         * the same graphic in different formats. The "hot spot" to use for rendering at a point or the
114         * start and finish handle points to use for rendering a graphic along a line must either be
115         * inherent in the external format or are system- dependent. The default size of an image format
116         * (such as GIF) is the inherent size of the image. The default size of a format without an
117         * inherent size is 16 pixels in height and the corresponding aspect in width. If a size is
118         * specified, the height of the graphic will be scaled to that size and the corresponding aspect
119         * will be used for the width. The default if neither an ExternalURL nor a Mark is specified is
120         * to use the default Mark with a size of 6 pixels. The size is in pixels and the rotation is in
121         * degrees clockwise, with 0 (default) meaning no rotation. In the case that a Graphic is
122         * derived from a font-glyph Mark, the Size specified here will be used for the final rendering.
123         * Allowed CssParameters are "opacity", "size", and "rotation".
124         *
125         * @return the graphic of the point
126         *
127         */
128        public Graphic getGraphic() {
129            return graphic;
130        }
131    
132        /**
133         * sets the <Graphic>
134         *
135         * @param graphic
136         *            the graphic of the point
137         *
138         */
139        public void setGraphic( Graphic graphic ) {
140            this.graphic = graphic;
141        }
142    
143        /**
144         * exports the content of the PointSymbolizer as XML formated String
145         *
146         * @return xml representation of the PointSymbolizer
147         */
148        public String exportAsXML() {
149    
150            StringBuffer sb = new StringBuffer( 1000 );
151            sb.append( "<PointSymbolizer>" );
152            if ( geometry != null ) {
153                sb.append( ( (Marshallable) geometry ).exportAsXML() );
154            }
155            if ( graphic != null ) {
156                sb.append( ( (Marshallable) graphic ).exportAsXML() );
157            }
158            sb.append( "</PointSymbolizer>" );
159    
160            return sb.toString();
161        }
162    }