/* * This file is part of JGrasstools (http://www.jgrasstools.org) * (C) HydroloGIS - www.hydrologis.com * * JGrasstools is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.jgrasstools.gears.io.rasterwriter; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_AUTHORCONTACTS; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_AUTHORNAMES; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_DESCRIPTION; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_KEYWORDS; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_LABEL; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_LICENSE; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_NAME; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_STATUS; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_FILE_DESCRIPTION; import static org.jgrasstools.gears.i18n.GearsMessages.OMSRASTERWRITER_IN_RASTER_DESCRIPTION; import static org.jgrasstools.gears.libs.modules.JGTConstants.ESRIGRID; import static org.jgrasstools.gears.libs.modules.JGTConstants.GEOTIF; import static org.jgrasstools.gears.libs.modules.JGTConstants.GEOTIFF; import static org.jgrasstools.gears.libs.modules.JGTConstants.GRASS; import java.io.File; import oms3.annotations.Author; import oms3.annotations.Description; import oms3.annotations.Execute; import oms3.annotations.In; import oms3.annotations.Keywords; import oms3.annotations.Label; import oms3.annotations.License; import oms3.annotations.Name; import oms3.annotations.Status; import oms3.annotations.UI; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.coverage.grid.io.AbstractGridFormat; import org.geotools.coverage.grid.io.imageio.GeoToolsWriteParams; import org.geotools.gce.arcgrid.ArcGridFormat; import org.geotools.gce.arcgrid.ArcGridWriteParams; import org.geotools.gce.arcgrid.ArcGridWriter; import org.geotools.gce.geotiff.GeoTiffFormat; import org.geotools.gce.geotiff.GeoTiffWriteParams; import org.geotools.gce.geotiff.GeoTiffWriter; import org.geotools.gce.grassraster.GrassCoverageWriter; import org.geotools.gce.grassraster.JGrassMapEnvironment; import org.geotools.gce.grassraster.JGrassRegion; import org.geotools.gce.grassraster.format.GrassCoverageFormat; import org.geotools.gce.grassraster.format.GrassCoverageFormatFactory; import org.jgrasstools.gears.io.grasslegacy.GrassLegacyGridCoverage2D; import org.jgrasstools.gears.io.grasslegacy.OmsGrassLegacyWriter; import org.jgrasstools.gears.io.grasslegacy.utils.GrassLegacyUtilities; import org.jgrasstools.gears.libs.exceptions.ModelsIllegalargumentException; import org.jgrasstools.gears.libs.modules.JGTConstants; import org.jgrasstools.gears.libs.modules.JGTModel; import org.jgrasstools.gears.libs.monitor.IJGTProgressMonitor; import org.jgrasstools.gears.utils.coverage.CoverageUtilities; import org.opengis.parameter.GeneralParameterValue; import org.opengis.parameter.ParameterValueGroup; @Description(OMSRASTERWRITER_DESCRIPTION) @Author(name = OMSRASTERWRITER_AUTHORNAMES, contact = OMSRASTERWRITER_AUTHORCONTACTS) @Keywords(OMSRASTERWRITER_KEYWORDS) @Label(OMSRASTERWRITER_LABEL) @Name(OMSRASTERWRITER_NAME) @Status(OMSRASTERWRITER_STATUS) @License(OMSRASTERWRITER_LICENSE) public class OmsRasterWriter extends JGTModel { @Description(OMSRASTERWRITER_IN_RASTER_DESCRIPTION) @In public GridCoverage2D inRaster = null; @Description(OMSRASTERWRITER_FILE_DESCRIPTION) @UI(JGTConstants.FILEOUT_UI_HINT) @In public String file = null; @Execute public void process() throws Exception { checkNull(inRaster); if (inRaster.getName().toString().equals("dummy")) { pm.message("WARNING: Not writing dummy raster to file."); return; } String pType = null; // guess from the extension if (file.toLowerCase().endsWith(ESRIGRID)) { pType = ESRIGRID; } else if (file.toLowerCase().endsWith(GEOTIFF) || file.toLowerCase().endsWith(GEOTIF)) { pType = GEOTIFF; } else if (CoverageUtilities.isGrass(file)) { pType = GRASS; } else throw new ModelsIllegalargumentException("Can't recognize the data format. Supported are: asc, tiff, grass.", this .getClass().getSimpleName(), pm); File mapFile = new File(file); try { pm.beginTask("Writing coverage: " + mapFile.getName(), IJGTProgressMonitor.UNKNOWN); if (pType.equals(ESRIGRID)) { writeArcGrid(mapFile); } else if (pType.equals(GEOTIFF)) { writeGeotiff(mapFile); } else if (pType.equals(GRASS)) { writeGrass(mapFile); } else { throw new ModelsIllegalargumentException("Data type not supported: " + pType, this.getClass().getSimpleName(), pm); } } finally { pm.done(); } } private void writeArcGrid( File mapFile ) throws Exception { final ArcGridFormat format = new ArcGridFormat(); final ArcGridWriteParams wp = new ArcGridWriteParams(); final ParameterValueGroup paramWrite = format.getWriteParameters(); paramWrite.parameter(AbstractGridFormat.GEOTOOLS_WRITE_PARAMS.getName().toString()).setValue(wp); ArcGridWriter gtw = (ArcGridWriter) format.getWriter(new File(file)); gtw.write(inRaster, (GeneralParameterValue[]) paramWrite.values().toArray(new GeneralParameterValue[1])); gtw.dispose(); } private void writeGeotiff( File mapFile ) throws Exception { final GeoTiffFormat format = new GeoTiffFormat(); final GeoTiffWriteParams wp = new GeoTiffWriteParams(); wp.setCompressionMode(GeoTiffWriteParams.MODE_DEFAULT); wp.setTilingMode(GeoToolsWriteParams.MODE_DEFAULT); final ParameterValueGroup paramWrite = format.getWriteParameters(); paramWrite.parameter(AbstractGridFormat.GEOTOOLS_WRITE_PARAMS.getName().toString()).setValue(wp); GeoTiffWriter gtw = (GeoTiffWriter) format.getWriter(mapFile); gtw.write(inRaster, (GeneralParameterValue[]) paramWrite.values().toArray(new GeneralParameterValue[1])); } private void writeGrass( File mapFile ) throws Exception { File cellFile = mapFile; JGrassMapEnvironment mapEnvironment = new JGrassMapEnvironment(cellFile); GeneralParameterValue[] readParams = null; JGrassRegion jGrassRegion = null; boolean doLarge = false; if (inRaster instanceof GrassLegacyGridCoverage2D) { doLarge = true; } // if (doActive) { // jGrassRegion = mapEnvironment.getActiveRegion(); // if (!doLarge) { // readParams = // CoverageUtilities.createGridGeometryGeneralParameter(jGrassRegion.getCols(), // jGrassRegion.getRows(), jGrassRegion.getNorth(), jGrassRegion.getSouth(), // jGrassRegion.getEast(), // jGrassRegion.getWest(), mapEnvironment.getCoordinateReferenceSystem()); // } // } if (!doLarge) { GrassCoverageFormat format = new GrassCoverageFormatFactory().createFormat(); GrassCoverageWriter writer = format.getWriter(mapEnvironment.getCELL(), null); writer.write(inRaster, readParams); writer.dispose(); } else { GrassLegacyGridCoverage2D gd2 = (GrassLegacyGridCoverage2D) inRaster; OmsGrassLegacyWriter writer = new OmsGrassLegacyWriter(); writer.geodata = gd2.getData(); writer.file = file; if (jGrassRegion == null) jGrassRegion = mapEnvironment.getActiveRegion(); writer.inWindow = GrassLegacyUtilities.jgrassRegion2legacyWindow(jGrassRegion); writer.writeRaster(); } } public static void writeRaster( String path, GridCoverage2D coverage ) throws Exception { OmsRasterWriter writer = new OmsRasterWriter(); writer.inRaster = coverage; writer.file = path; writer.process(); } }