Package org.geotools.renderer.lite

Source Code of org.geotools.renderer.lite.GraphicsAwareDpiRescaleStyleVisitor

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2013, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.renderer.lite;

import org.geotools.factory.CommonFactoryFinder;
import org.geotools.renderer.style.GraphicStyle2D;
import org.geotools.renderer.style.IconStyle2D;
import org.geotools.renderer.style.MarkStyle2D;
import org.geotools.renderer.style.SLDStyleFactory;
import org.geotools.renderer.style.Style2D;
import org.geotools.styling.Graphic;
import org.geotools.styling.PointSymbolizer;
import org.geotools.styling.StyleFactory;
import org.geotools.styling.visitor.DpiRescaleStyleVisitor;
import org.geotools.util.Range;
import org.opengis.filter.expression.Expression;

/**
* This class extends {@link DpiRescaleStyleVisitor} to add support for rescaling external graphics
* and marks whose size has not been explicitly set.
*
* Works properly as long as the expression in an eventual dynamic symbolizer are not setting the
* size of the symbol, as we don't have the feature here, and there is no way to know which bit
* of the url will setup the size
*
* @author Andrea Aime - GeoSolutions
*
*/
public class GraphicsAwareDpiRescaleStyleVisitor extends DpiRescaleStyleVisitor {
   
    static final StyleFactory sf = CommonFactoryFinder.getStyleFactory();
    static final Range<Double> INFINITE_RANGE = new Range<Double>(Double.class, 0d, Double.POSITIVE_INFINITY);
    SLDStyleFactory ssf = new SLDStyleFactory();
   
    public GraphicsAwareDpiRescaleStyleVisitor(double scale) {
        super(scale);
    }

   
    @Override
    protected Expression rescaleGraphicSize(Graphic gr) {
        Expression size = gr.getSize();
        if(size == null || size == Expression.NIL) {
            PointSymbolizer symbolizer = sf.createPointSymbolizer(gr, null);
            Style2D style = ssf.createStyle(null, symbolizer, INFINITE_RANGE);
            if(style instanceof IconStyle2D) {
                IconStyle2D is = (IconStyle2D) style;
                size = ff.literal(is.getIcon().getIconHeight());
            } else if(style instanceof GraphicStyle2D) {
                GraphicStyle2D gs = (GraphicStyle2D) style;
                size = ff.literal(gs.getImage().getHeight());
            } else if(style instanceof MarkStyle2D) {
                MarkStyle2D ms = (MarkStyle2D) style;
                size = ff.literal(ms.getSize());
            }
        }
       
        return rescale(size);
    }
}
TOP

Related Classes of org.geotools.renderer.lite.GraphicsAwareDpiRescaleStyleVisitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.