/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2010, 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.geopkg.mosaic; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.awt.Rectangle; import java.awt.image.RenderedImage; 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.AbstractGridFormat; import org.geotools.data.DataUtilities; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.geopkg.GeoPackageTest; import org.geotools.geopkg.mosaic.GeoPackageReader; import org.geotools.image.test.ImageAssert; import org.geotools.parameter.Parameter; import org.geotools.referencing.CRS; import org.junit.Test; import org.opengis.parameter.GeneralParameterValue; import org.opengis.referencing.crs.CoordinateReferenceSystem; public class GeoPackageReaderTest { private final CoordinateReferenceSystem WGS_84; public GeoPackageReaderTest() { try { WGS_84 = CRS.decode("EPSG:4326", true); } catch (Exception e) { throw new RuntimeException(e); } } @Test public void testZoomlevel0() throws IOException { GeoPackageReader reader = new GeoPackageReader(GeoPackageTest.class.getResource("Blue_Marble.gpkg"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D(new GridEnvelope2D(new Rectangle(1000,500)), new ReferencedEnvelope(-160,160.0,-80.0,80,WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read("bluemarble_tif_tiles", parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(-180, gc.getEnvelope().getMinimum(0),0.01); assertEquals(-90, gc.getEnvelope().getMinimum(1),0.01); assertEquals(180, gc.getEnvelope().getMaximum(0),0.01); assertEquals(90, gc.getEnvelope().getMaximum(1),0.01); assertEquals(1536, img.getWidth()); assertEquals(768, img.getHeight()); //test CRS is consistent now assertTrue(CRS.equalsIgnoreMetadata(gc.getCoordinateReferenceSystem(), gc.getEnvelope().getCoordinateReferenceSystem())); //ImageIO.write(img, "png", DataUtilities.urlToFile(getClass().getResource("world_lakes.png"))); ImageAssert.assertEquals(DataUtilities.urlToFile(GeoPackageTest.class.getResource("bluemarble.jpeg")), img, 250); } @Test public void testZoomlevel1() throws IOException { GeoPackageReader reader = new GeoPackageReader(GeoPackageTest.class.getResource("Blue_Marble.gpkg"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D(new GridEnvelope2D(new Rectangle(1000,500)), new ReferencedEnvelope(0,160,0,80,WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read("bluemarble_tif_tiles", parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0),0.01); assertEquals(0, gc.getEnvelope().getMinimum(1),0.01); assertEquals(180, gc.getEnvelope().getMaximum(0),0.01); assertEquals(90, gc.getEnvelope().getMaximum(1),0.01); assertEquals(1536, img.getWidth()); assertEquals(768, img.getHeight()); } @Test public void testZoomlevel2() throws IOException { GeoPackageReader reader = new GeoPackageReader(GeoPackageTest.class.getResource("Blue_Marble.gpkg"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D(new GridEnvelope2D(new Rectangle(1000,500)), new ReferencedEnvelope(0,80,0,40,WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read("bluemarble_tif_tiles", parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0),0.01); assertEquals(0, gc.getEnvelope().getMinimum(1),0.01); assertEquals(90, gc.getEnvelope().getMaximum(0),0.01); assertEquals(45, gc.getEnvelope().getMaximum(1),0.01); assertEquals(1536, img.getWidth()); assertEquals(768, img.getHeight()); } @Test public void testZoomlevel3() throws IOException { GeoPackageReader reader = new GeoPackageReader(GeoPackageTest.class.getResource("Blue_Marble.gpkg"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D(new GridEnvelope2D(new Rectangle(1000,500)), new ReferencedEnvelope(0,40,0,20,WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read("bluemarble_tif_tiles", parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0),0.01); assertEquals(0, gc.getEnvelope().getMinimum(1),0.01); assertEquals(45, gc.getEnvelope().getMaximum(0),0.01); assertEquals(22.5, gc.getEnvelope().getMaximum(1),0.01); assertEquals(1536, img.getWidth()); assertEquals(768, img.getHeight()); } @Test public void testZoomlevel4() throws IOException { GeoPackageReader reader = new GeoPackageReader(GeoPackageTest.class.getResource("Blue_Marble.gpkg"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D(new GridEnvelope2D(new Rectangle(1000,500)), new ReferencedEnvelope(0,20,0,10,WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read("bluemarble_tif_tiles", parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0),0.01); assertEquals(0, gc.getEnvelope().getMinimum(1),0.01); assertEquals(22.5, gc.getEnvelope().getMaximum(0),0.01); assertEquals(11.25, gc.getEnvelope().getMaximum(1),0.01); assertEquals(1536, img.getWidth()); assertEquals(768, img.getHeight()); } }