/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wcs.responses; import java.awt.image.DataBuffer; import java.awt.image.Raster; import java.awt.image.RenderedImage; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.geoserver.config.GeoServer; import org.geoserver.platform.ServiceException; import org.geotools.coverage.grid.GridCoverage2D; /** * A basic text based output format designed to ease debugging GetCoverage calls (and actually read * the contents of a coverage without getting mad...) * * @author Andrea Aime - TOPP * */ public class DebugCoverageResponseDelegate extends BaseCoverageResponseDelegate implements CoverageResponseDelegate { @SuppressWarnings("serial") public DebugCoverageResponseDelegate(GeoServer geoserver) { super( geoserver, Arrays.asList("DEBUG","text/debug"), //output formats new HashMap<String, String>(){ // file extensions { put("DEBUG", "txt"); put("text/debug", "txt"); put("text/plain", "txt"); } }, new HashMap<String, String>(){ //mime types { put("DEBUG", "text/plain"); put("text/debug", "text/plain"); } }); } public void encode(GridCoverage2D coverage, String outputFormat, Map<String,String> econdingParameters,OutputStream output) throws ServiceException, IOException { PrintStream ps = new PrintStream(output); ps.println("Grid bounds: " + coverage.getEnvelope()); ps.println("Grid CRS: " + coverage.getCoordinateReferenceSystem()); ps.println("Grid range: " + coverage.getGridGeometry().getGridRange()); ps.println("Grid to world: " + coverage.getGridGeometry().getGridToCRS()); ps.println("Contents:"); RenderedImage ri = coverage.getRenderedImage(); Raster raster = ri.getData(); for (int band = 0; band < raster.getNumBands(); band++) { ps.println("Band " + band + ":"); for (int j = raster.getMinY(); j < (raster.getMinY() + raster.getHeight()); j++) { for (int i = raster.getMinX(); i < (raster.getMinX() + raster.getWidth()); i++) { if (raster.getTransferType() == DataBuffer.TYPE_DOUBLE) ps.print(raster.getSampleDouble(i, j, band)); else if (raster.getTransferType() == DataBuffer.TYPE_FLOAT) ps.print(raster.getSampleFloat(i, j, band)); else ps.print(raster.getSample(i, j, band)); if (i < (raster.getMinX() + raster.getWidth() - 1)) ; ps.print(" "); } ps.println(); } } ps.flush(); coverage.dispose(false); } }