view flys-artifacts/src/main/java/de/intevation/flys/artifacts/map/PrintMap.java @ 4837:9e25c7523485

Fixed calculation of effective width in MINFO SQ relation. * Get all (including empty datasets) from db. * Filter empty datasets when processing data of the same date. * Added debug outputs.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 23 Jan 2013 11:14:41 +0100
parents 4a76da133144
children
line wrap: on
line source
package de.intevation.flys.artifacts.map;

import java.awt.Color;
import java.awt.Rectangle;

import java.io.File;
import java.io.IOException;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import java.util.List;

import java.net.URL;
import java.net.MalformedURLException;

import javax.imageio.ImageIO;


import org.geotools.data.ows.Layer;
import org.geotools.data.ows.WMSCapabilities;
import org.geotools.data.wms.WebMapServer;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.map.MapContext;
import org.geotools.map.WMSMapLayer;
import org.geotools.ows.ServiceException;
import org.geotools.renderer.lite.StreamingRenderer;
import org.geotools.renderer.GTRenderer;


public class PrintMap {

    public static final String DEFAULT_WMS = "http://map1.naturschutz.rlp.de/service_lanis/mod_wms/wms_getmap.php?mapfile=group_gdide&REQUEST=GetCapabilities&SERVICE=WMS";
    public static final String DEFAULT_OUTFILE = "~/map.jpeg";

    public static final String MAPSERVER = System.getProperty("wms", DEFAULT_WMS);
    public static final String MAP_IMAGE = System.getProperty("outfile", DEFAULT_OUTFILE);


    public static void main(String[] args) {
        System.out.println("-> start PrintMap");
        System.out.println("  -> Print layers of WMS: " + MAPSERVER);

        try {
            WebMapServer    server = getMapserver();
            WMSMapLayer[] wmsLayer = getWMSLayers(server);

            MapContext mapcontent = new MapContext( wmsLayer );
            mapcontent.setTitle(" NEW MAP CONTENT TITLE ");

            printMap(mapcontent);
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("-> finished PrintMap");
    }


    public static void printMap(MapContext map) throws Exception {
        int imageWidth = 600;

        GTRenderer renderer = new StreamingRenderer();
        renderer.setContext(map);

        Rectangle imageBounds = null;
        ReferencedEnvelope mapBounds = null;

        try {
            mapBounds = map.getLayerBounds();
            double heightToWidth = mapBounds.getSpan(1) / mapBounds.getSpan(0);
            imageBounds = new Rectangle(
                0, 0,
                imageWidth,
                (int) Math.round(imageWidth * heightToWidth));

        }
        catch (Exception e) {
            // failed to access map layers
            throw new RuntimeException(e);
        }

        BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_RGB);
        Graphics2D gr = image.createGraphics();
        gr.setPaint(Color.WHITE);
        gr.fill(imageBounds);

        try {
            renderer.paint(gr, imageBounds, mapBounds);
            File fileToSave = new File(MAP_IMAGE);
            ImageIO.write(image, "jpeg", fileToSave);
        }
        catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    public static WebMapServer getMapserver() throws MalformedURLException, IOException, ServiceException {
        return new WebMapServer(getServerUrl());
    }


    public static URL getServerUrl() throws MalformedURLException {
        return new URL(MAPSERVER);
    }


    public static WMSMapLayer[] getWMSLayers(WebMapServer server) {
        if (server == null) {
            System.out.println("WebMapServer == null");
            throw new RuntimeException("WebMapServer == null");
        }

        WMSCapabilities capabilities = server.getCapabilities();

        List<Layer> layers = capabilities.getLayerList();
        WMSMapLayer[] wmslayers = new WMSMapLayer[layers.size()];

        for (int i = 0, L = layers.size(); i < L; i++) {
            Layer l = layers.get(i);

            System.out.println("   -> add layer: " + l);
            wmslayers[i] = new WMSMapLayer(server, l);
        }

        return wmslayers;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org