christian@5022: package de.intevation.flys.utils; christian@5022: christian@5022: import java.awt.Color; christian@5022: import java.awt.Rectangle; christian@5022: christian@5022: import java.io.File; christian@5022: import java.io.IOException; christian@5022: christian@5022: import java.awt.Graphics2D; christian@5022: import java.awt.image.BufferedImage; christian@5022: christian@5022: import java.util.List; christian@5022: christian@5022: import java.net.URL; christian@5022: import java.net.MalformedURLException; christian@5022: christian@5022: import javax.imageio.ImageIO; christian@5022: christian@5022: christian@5022: import org.geotools.data.ows.Layer; christian@5022: import org.geotools.data.ows.WMSCapabilities; christian@5022: import org.geotools.data.wms.WebMapServer; christian@5022: import org.geotools.geometry.jts.ReferencedEnvelope; christian@5022: import org.geotools.map.MapContext; christian@5022: import org.geotools.map.WMSMapLayer; christian@5022: import org.geotools.ows.ServiceException; christian@5022: import org.geotools.renderer.lite.StreamingRenderer; christian@5022: import org.geotools.renderer.GTRenderer; christian@5022: christian@5022: christian@5022: public class PrintMap { christian@5022: christian@5022: 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"; christian@5022: public static final String DEFAULT_OUTFILE = "~/map.jpeg"; christian@5022: christian@5022: public static final String MAPSERVER = System.getProperty("wms", DEFAULT_WMS); christian@5022: public static final String MAP_IMAGE = System.getProperty("outfile", DEFAULT_OUTFILE); christian@5022: christian@5022: christian@5022: public static void main(String[] args) { christian@5022: System.out.println("-> start PrintMap"); christian@5022: System.out.println(" -> Print layers of WMS: " + MAPSERVER); christian@5022: christian@5022: try { christian@5022: WebMapServer server = getMapserver(); christian@5022: WMSMapLayer[] wmsLayer = getWMSLayers(server); christian@5022: christian@5022: MapContext mapcontent = new MapContext( wmsLayer ); christian@5022: mapcontent.setTitle(" NEW MAP CONTENT TITLE "); christian@5022: christian@5022: printMap(mapcontent); christian@5022: } christian@5022: catch (Exception e) { christian@5022: e.printStackTrace(); christian@5022: } christian@5022: christian@5022: System.out.println("-> finished PrintMap"); christian@5022: } christian@5022: christian@5022: christian@5022: public static void printMap(MapContext map) throws Exception { christian@5022: int imageWidth = 600; christian@5022: christian@5022: GTRenderer renderer = new StreamingRenderer(); christian@5022: renderer.setContext(map); christian@5022: christian@5022: Rectangle imageBounds = null; christian@5022: ReferencedEnvelope mapBounds = null; christian@5022: christian@5022: try { christian@5022: mapBounds = map.getLayerBounds(); christian@5022: double heightToWidth = mapBounds.getSpan(1) / mapBounds.getSpan(0); christian@5022: imageBounds = new Rectangle( christian@5022: 0, 0, christian@5022: imageWidth, christian@5022: (int) Math.round(imageWidth * heightToWidth)); christian@5022: christian@5022: } christian@5022: catch (Exception e) { christian@5022: // failed to access map layers christian@5022: throw new RuntimeException(e); christian@5022: } christian@5022: christian@5022: BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_RGB); christian@5022: Graphics2D gr = image.createGraphics(); christian@5022: gr.setPaint(Color.WHITE); christian@5022: gr.fill(imageBounds); christian@5022: christian@5022: try { christian@5022: renderer.paint(gr, imageBounds, mapBounds); christian@5022: File fileToSave = new File(MAP_IMAGE); christian@5022: ImageIO.write(image, "jpeg", fileToSave); christian@5022: } christian@5022: catch (IOException e) { christian@5022: throw new RuntimeException(e); christian@5022: } christian@5022: } christian@5022: christian@5022: christian@5022: public static WebMapServer getMapserver() throws MalformedURLException, IOException, ServiceException { christian@5022: return new WebMapServer(getServerUrl()); christian@5022: } christian@5022: christian@5022: christian@5022: public static URL getServerUrl() throws MalformedURLException { christian@5022: return new URL(MAPSERVER); christian@5022: } christian@5022: christian@5022: christian@5022: public static WMSMapLayer[] getWMSLayers(WebMapServer server) { christian@5022: if (server == null) { christian@5022: System.out.println("WebMapServer == null"); christian@5022: throw new RuntimeException("WebMapServer == null"); christian@5022: } christian@5022: christian@5022: WMSCapabilities capabilities = server.getCapabilities(); christian@5022: christian@5022: List layers = capabilities.getLayerList(); christian@5022: WMSMapLayer[] wmslayers = new WMSMapLayer[layers.size()]; christian@5022: christian@5022: for (int i = 0, L = layers.size(); i < L; i++) { christian@5022: Layer l = layers.get(i); christian@5022: christian@5022: System.out.println(" -> add layer: " + l); christian@5022: wmslayers[i] = new WMSMapLayer(server, l); christian@5022: } christian@5022: christian@5022: return wmslayers; christian@5022: } christian@5022: } christian@5022: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :