/* * Geotoolkit.org - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2012, Open Source Geospatial Foundation (OSGeo) * (C) 2012, Geomatys * * 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.geotoolkit.coverage.grid; import java.awt.Color; import java.awt.Graphics2D; import java.io.IOException; import java.awt.image.BufferedImage; import org.apache.sis.geometry.Envelope2D; import org.geotoolkit.referencing.crs.PredefinedCRS; import org.junit.*; import static org.junit.Assert.*; /** * Tests the {@link GridCoverageBuilder} class. * * @author Martin Desruisseaux (IRD) * @version 3.20 * * @since 2.1 */ public final strictfp class GridCoverageBuilderTest extends GridCoverageTestBase { /** * Creates a new test suite. */ public GridCoverageBuilderTest() { super(GridCoverageBuilder.class); } /** * Tests creating a grid coverage with a plain RGB image. */ @Test public void testRGB() { final GridCoverageBuilder builder = new GridCoverageBuilder(); builder.setRenderedImage(new BufferedImage(2, 2, BufferedImage.TYPE_INT_RGB)); builder.setEnvelope(new Envelope2D(null, 0, 0, 2, 2)); builder.setCoordinateReferenceSystem(PredefinedCRS.GRID_2D); coverage = builder.getGridCoverage2D(); assertTrue(coverage.getViewTypes().contains(ViewType.PHOTOGRAPHIC)); } /** * Tests the creation from a raster using byte data type. * * @throws IOException If an error occurred while reading the test image. */ @Test public void testByteFromRaster() throws IOException { final GridCoverageBuilder builder = new GridCoverageBuilder(); builder.setName("SampleCoverage.SST"); builder.setEnvelope(new Envelope2D(null, SampleCoverage.SST.bounds)); builder.setCoordinateReferenceSystem(SampleCoverage.SST.crs); builder.variable(0).setName("Temperature"); builder.variable(0).setSampleRange(30, 220); builder.variable(0).setLinearTransform(0.1, 10); builder.variable(0).setColors(Color.BLUE, Color.GREEN, Color.YELLOW, Color.RED); builder.variable(0).addNodataValue("Missing values", 255, Color.GRAY); builder.setRenderedImage(SampleCoverage.SST.raster()); coverage = builder.getGridCoverage2D(); SampleCoverage.SST.verifyGridGeometry(coverage, 0); assertTrue ("Expected ViewType.PACKED", coverage.getViewTypes().contains(ViewType.PACKED)); assertFalse ("Expected ViewType.PACKED", coverage.getViewTypes().contains(ViewType.GEOPHYSICS)); assertEquals("Wrong scale factor for X", 0.1, builder.getAffineGridToCRS().getScaleX(), 1E-10); final Graphics2D gr = (Graphics2D) builder.createGraphics(true); assertEquals("Wrong scale factor for X", 10, gr.getTransform().getScaleX(), 1E-10); gr.dispose(); show(coverage); } /** * Tests the creation from a raster using float data type. * * @throws IOException Should never occurs. */ @Test public void testFloatFromRaster() throws IOException { final GridCoverageBuilder builder = new GridCoverageBuilder(); builder.setName("SampleCoverage.FLOAT"); builder.setEnvelope(new Envelope2D(SampleCoverage.FLOAT.crs, SampleCoverage.FLOAT.bounds)); builder.variable(0).setSampleRange(0, 256); builder.variable(0).setGeophysicsRange(0, 1000); builder.variable(0).setColors(Color.RED, Color.WHITE, Color.BLUE); builder.setRenderedImage(SampleCoverage.FLOAT.raster()); coverage = builder.getGridCoverage2D(); SampleCoverage.SST.verifyGridGeometry(coverage, 0); assertTrue ("Expected ViewType.GEOPHYSICS", coverage.getViewTypes().contains(ViewType.GEOPHYSICS)); assertFalse("Expected ViewType.GEOPHYSICS", coverage.getViewTypes().contains(ViewType.PACKED)); show(coverage); } /** * Tests a change of CRS. * * @see <a href="http://www.geotoolkit.org/modules/coverage/faq.html#changeCRS">How do I change the CRS of an existing GridCoverage2D?</a> * * @since 3.20 */ @Test public void testChangeCRS() { loadSampleCoverage(SampleCoverage.SST); final GridCoverageBuilder builder = new GridCoverageBuilder(); builder.setGridCoverage(coverage); builder.setCoordinateReferenceSystem(PredefinedCRS.CARTESIAN_2D); final GridCoverage2D newGC = builder.getGridCoverage2D(); assertNotSame("Expected a new grid coverage.", coverage, newGC); assertSame(PredefinedCRS.CARTESIAN_2D, newGC.getCoordinateReferenceSystem()); assertEquals(coverage.getGridGeometry().getGridToCRS(), newGC .getGridGeometry().getGridToCRS()); } }