All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.geotools.gce.grassraster.GrassCoverageWriter Maven / Gradle / Ivy

/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2006-2015, 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.gce.grassraster;

import java.awt.Rectangle;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverage.grid.GridEnvelope2D;
import org.geotools.coverage.grid.GridGeometry2D;
import org.geotools.coverage.grid.io.AbstractGridCoverageWriter;
import org.geotools.coverage.grid.io.AbstractGridFormat;
import org.geotools.gce.grassraster.core.GrassBinaryRasterWriteHandler;
import org.geotools.gce.grassraster.format.GrassCoverageFormat;
import org.geotools.gce.grassraster.spi.GrassBinaryImageWriterSpi;
import org.geotools.geometry.Envelope2D;
import org.geotools.geometry.GeneralEnvelope;
import org.opengis.coverage.grid.Format;
import org.opengis.coverage.grid.GridCoverage;
import org.opengis.coverage.grid.GridCoverageWriter;
import org.opengis.geometry.DirectPosition;
import org.opengis.geometry.Envelope;
import org.opengis.parameter.GeneralParameterValue;
import org.opengis.parameter.ParameterValue;
import org.opengis.util.ProgressListener;

/**
 * Coverage Writer class for writing GRASS raster maps.
 *
 * 

The class writes a GRASS raster map to a GRASS workspace (see package documentation for * further info). The writing is really done via Imageio extended classes. * * @author Andrea Antonello (www.hydrologis.com) * @since 3.0 * @see GrassBinaryImageWriter * @see GrassBinaryRasterWriteHandler */ public class GrassCoverageWriter extends AbstractGridCoverageWriter implements GridCoverageWriter { private File output; private ProgressListener monitor = new DummyProgressListener(); /** Constructor for the {@link GrassCoverageWriter}. */ public GrassCoverageWriter(Object output) { if (output instanceof File) { this.output = (File) output; } else { throw new IllegalArgumentException("Illegal input argument!"); } } public void setProgressListener(ProgressListener monitor) { this.monitor = monitor; } /** * Writes the {@link GridCoverage2D supplied coverage} to disk. * *

Note that this also takes care to cloes the file handle after writing to disk. * * @param gridCoverage2D the coverage to write. */ public void writeRaster(GridCoverage2D gridCoverage2D) throws IOException { try { Envelope2D env = gridCoverage2D.getEnvelope2D(); GridEnvelope2D worldToGrid = gridCoverage2D.getGridGeometry().worldToGrid(env); double xRes = env.getWidth() / worldToGrid.getWidth(); double yRes = env.getHeight() / worldToGrid.getHeight(); JGrassRegion region = new JGrassRegion( env.getMinX(), env.getMaxX(), env.getMinY(), env.getMaxY(), xRes, yRes); GrassBinaryImageWriterSpi writerSpi = new GrassBinaryImageWriterSpi(); GrassBinaryImageWriter writer = new GrassBinaryImageWriter(writerSpi, monitor); RenderedImage renderedImage = gridCoverage2D.getRenderedImage(); writer.setOutput(output, region); writer.write(renderedImage); writer.dispose(); } catch (Exception e) { java.util.logging.Logger.getGlobal().log(java.util.logging.Level.INFO, "", e); } } public void writeRaster(GridCoverage2D gridCoverage2D, GeneralParameterValue[] params) throws IOException { GeneralEnvelope requestedEnvelope = null; Rectangle dim = null; JGrassRegion writeRegion = null; if (params != null) { for (int i = 0; i < params.length; i++) { final ParameterValue param = (ParameterValue) params[i]; final String name = param.getDescriptor().getName().getCode(); if (name.equals(AbstractGridFormat.READ_GRIDGEOMETRY2D.getName().toString())) { final GridGeometry2D gg = (GridGeometry2D) param.getValue(); requestedEnvelope = new GeneralEnvelope((Envelope) gg.getEnvelope2D()); dim = gg.getGridRange2D().getBounds(); continue; } } if (requestedEnvelope != null && dim != null) { DirectPosition lowerCorner = requestedEnvelope.getLowerCorner(); double[] westSouth = lowerCorner.getCoordinate(); DirectPosition upperCorner = requestedEnvelope.getUpperCorner(); double[] eastNorth = upperCorner.getCoordinate(); writeRegion = new JGrassRegion( westSouth[0], eastNorth[0], westSouth[1], eastNorth[1], dim.height, dim.width); } } if (writeRegion == null) { throw new IOException("Unable to define writing region."); } GrassBinaryImageWriterSpi writerSpi = new GrassBinaryImageWriterSpi(); GrassBinaryImageWriter writer = new GrassBinaryImageWriter(writerSpi, monitor); RenderedImage renderedImage = gridCoverage2D.getRenderedImage(); writer.setOutput(output, writeRegion); writer.write(renderedImage); writer.dispose(); } public Format getFormat() { return new GrassCoverageFormat(); } public void write(GridCoverage coverage, GeneralParameterValue[] parameters) throws IllegalArgumentException, IOException { if (coverage instanceof GridCoverage2D) { GridCoverage2D gridCoverage = (GridCoverage2D) coverage; if (parameters == null) { writeRaster(gridCoverage); } else { writeRaster(gridCoverage, parameters); } } else { throw new IllegalArgumentException("Coverage not a GridCoverage2D"); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy