/* * Geotoolkit.org - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2003-2012, Open Source Geospatial Foundation (OSGeo) * (C) 2009-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.geom.AffineTransform; import org.opengis.referencing.datum.PixelInCell; import org.opengis.referencing.operation.MathTransform; import org.opengis.metadata.spatial.PixelOrientation; import org.apache.sis.geometry.GeneralEnvelope; import org.apache.sis.referencing.operation.transform.MathTransforms; import org.junit.*; import static org.junit.Assert.*; /** * Test the {@link GridGeometry} implementation. * * @author Martin Desruisseaux (IRD) * @version 3.00 * * @since 2.1 */ public final strictfp class GridGeometryTest extends org.geotoolkit.test.TestBase { /** * Tests the construction with an identity transform. */ @Test public void testIdentity() { final int[] lower = new int[] {0, 0, 2}; final int[] upper = new int[] {100, 200, 4}; final MathTransform identity = MathTransforms.identity(3); GridGeometry2D gg; try { gg = new GridGeometry2D(new GeneralGridEnvelope(lower, upper, false), identity, null); fail(); } catch (IllegalArgumentException e) { // This is the expected dimension. } upper[2] = 3; gg = new GridGeometry2D(new GeneralGridEnvelope(lower, upper, false), identity, null); assertTrue(identity.isIdentity()); assertTrue(gg.getGridToCRS().isIdentity()); assertTrue(gg.getGridToCRS2D().isIdentity()); assertEquals(3, gg.getGridToCRS().getSourceDimensions()); assertEquals(2, gg.getGridToCRS2D().getSourceDimensions()); assertTrue(gg.getGridToCRS2D() instanceof AffineTransform); /* * Tests with a pixel orientation. */ AffineTransform tr = (AffineTransform) gg.getGridToCRS2D(PixelOrientation.CENTER); assertTrue(tr.isIdentity()); tr = (AffineTransform) gg.getGridToCRS2D(PixelOrientation.UPPER_LEFT); assertFalse(tr.isIdentity()); assertEquals(AffineTransform.TYPE_TRANSLATION, tr.getType()); assertEquals(-0.5, tr.getTranslateX(), 0); assertEquals(-0.5, tr.getTranslateY(), 0); } /** * Tests the construction from an envelope. */ @Test public void testEnvelope() { final int[] lower = new int[] { 0, 0, 4}; final int[] upper = new int[] { 90, 45, 5}; final double[] minimum = new double[] {-180, -90, 9}; final double[] maximum = new double[] {+180, +90, 10}; final GridGeometry2D gg; gg = new GridGeometry2D(new GeneralGridEnvelope(lower, upper, false), new GeneralEnvelope(minimum, maximum)); final AffineTransform tr = (AffineTransform) gg.getGridToCRS2D(); assertEquals(AffineTransform.TYPE_UNIFORM_SCALE | AffineTransform.TYPE_TRANSLATION | AffineTransform.TYPE_FLIP, tr.getType()); assertEquals( 4, tr.getScaleX(), 0); assertEquals( -4, tr.getScaleY(), 0); assertEquals(-178, tr.getTranslateX(), 0); assertEquals( 88, tr.getTranslateY(), 0); } /** * Tests construction with 0.5 pixel translations. */ @Test public void testPixelInCell() { final MathTransform identity = MathTransforms.identity(4); final int[] lower = new int[] {100, 300, 3, 6}; final int[] upper = new int[] {200, 400, 4, 7}; final GeneralGridEnvelope range = new GeneralGridEnvelope(lower, upper, false); GridGeometry2D gg = new GridGeometry2D(range, PixelInCell.CELL_CORNER, identity, null, null); assertSame (identity, gg.getGridToCRS(PixelInCell.CELL_CORNER)); assertFalse(identity.equals(gg.getGridToCRS(PixelInCell.CELL_CENTER))); assertFalse(identity.equals(gg.getGridToCRS(PixelOrientation.CENTER))); assertSame (gg.getGridToCRS(PixelInCell.CELL_CENTER), gg.getGridToCRS(PixelOrientation.CENTER)); AffineTransform tr = (AffineTransform) gg.getGridToCRS2D(PixelOrientation.CENTER); assertFalse(tr.isIdentity()); assertEquals(AffineTransform.TYPE_TRANSLATION, tr.getType()); assertEquals(0.5, tr.getTranslateX(), 0); assertEquals(0.5, tr.getTranslateY(), 0); tr = (AffineTransform) gg.getGridToCRS2D(PixelOrientation.UPPER_LEFT); assertTrue(tr.isIdentity()); } }