Package org.geotools.render

Source Code of org.geotools.render.GenerateSVG

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2006-2010, Open Source Geospatial Foundation (OSGeo)
*
*    This file is hereby placed into the Public Domain. This means anyone is
*    free to do whatever they wish with this file. Use it well and enjoy!
*/
package org.geotools.render;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.logging.Logger;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.batik.svggen.SVGGeneratorContext;
import org.apache.batik.svggen.SVGGraphics2D;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.map.MapContent;
import org.geotools.renderer.lite.StreamingRenderer;
import org.w3c.dom.Document;

/**
* This is a simple support class which allows you to generate an SVG file from a map.
*
* To use, setup a Map object with the layers you want to render, create an envelope for the region
* to be drawn and pass in an OutputStream (probably attached to a new file) for the resulting SVG
* information to be stored in.
*
* Optional you can change the default size of the SVG canvas (in effect increasing the resolution).
*
* @author James Macgill, PennState
* @version 2.8
*/
public class GenerateSVG {
private static Logger LOGGER = org.geotools.util.logging.Logging
        .getLogger("org.geotools.svgsupport");

// exportSVG start
/**
* Generate an SVG document from the supplied information. Note, use cavasSize first if you want
* to change the default output size.
*
* @param map
*            Contains the layers (features + styles) to be rendered
* @param env
*            The portion of the map to generate an SVG from
* @param out
*            Stream to write the resulting SVG out to (probable should be a new file)
* @param canvasSize
*            optional canvas size, will default to 300x300
* @throws IOException
*             Should anything go wrong whilst writing to 'out'
* @throws ParserConfigurationException
*             If critical XML tools are missing from the classpath
*/
public static void exportSVG(MapContent map, ReferencedEnvelope env, OutputStream out,
        Dimension canvasSize) throws IOException, ParserConfigurationException {
    if (canvasSize == null) {
        canvasSize = new Dimension(300, 300); // default of 300x300
    }
    Document document = null;
   
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
   
    // Create an instance of org.w3c.dom.Document
    document = db.getDOMImplementation().createDocument(null, "svg", null);
   
    // Set up the map
    SVGGeneratorContext ctx1 = SVGGeneratorContext.createDefault(document);
    SVGGeneratorContext ctx = ctx1;
    ctx.setComment("Generated by GeoTools2 with Batik SVG Generator");
   
    SVGGraphics2D g2d = new SVGGraphics2D(ctx, true);
   
    g2d.setSVGCanvasSize(canvasSize);
   
    StreamingRenderer renderer = new StreamingRenderer();
    renderer.setMapContent(map);
   
    Rectangle outputArea = new Rectangle(g2d.getSVGCanvasSize());
    ReferencedEnvelope dataArea = map.getMaxBounds();
   
    LOGGER.finest("rendering map");
    renderer.paint(g2d, outputArea, dataArea);
    LOGGER.finest("writing to file");
    OutputStreamWriter osw = null;
    try {
        osw = new OutputStreamWriter(out, "UTF-8");
        g2d.stream(osw);
    } finally {
        if (osw != null)
            osw.close();
    }
   
}
// exportSVG end
}
TOP

Related Classes of org.geotools.render.GenerateSVG

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.