/** * Test transparency is preserved when applying an RGB ChannelSelect and ContrastEnhancement * style to an imageMosaic with transparent color being set */ @Test public void testRGBAWithContrastEnhancementInChannelSelect() throws IOException, NoSuchAuthorityCodeException, FactoryException { GeoTiffReader reader = new GeoTiffReader(TestData.file(this, "map.tif")); GridCoverage2D gc = reader.read(null); RenderedImage ri = gc.getRenderedImage(); GridCoverage2D output = (GridCoverage2D) symbolizeRaster(gc, "ce_cs.sld"); ri = output.getRenderedImage(); // Assert the alpha band has been preserved, even with a CS+CE SLD in place assertHasAlpha(ri); disposeCoverage(output); }
/** Returns the original source file, is present in the metadata, and if the coverage */ private File getSourceFile(GridCoverage2D coverage) { final Object fileSource = coverage.getProperty(AbstractGridCoverage2DReader.FILE_SOURCE_PROPERTY); if (fileSource != null && fileSource instanceof String) { File file = new File((String) fileSource); if (file.exists()) { GeoTiffReader reader = null; try { reader = new GeoTiffReader(file); GeneralEnvelope originalEnvelope = reader.getOriginalEnvelope(); Envelope envelope = coverage.getEnvelope(); if (originalEnvelope.equals(envelope, 1e-9, false)) { GridCoverage2D test = reader.read(null); ImageUtilities.disposeImage(test.getRenderedImage()); return file; } } catch (Exception e) { // ok, not a geotiff! } finally { if (reader != null) { reader.dispose(); } } } } return null; }
private void initReaderFromFile(Hints inHints) throws IOException { if (!this.dataDirectory.isDirectory()) { throw new IOException(this.dataDirectory + " is not a directory"); } File dataFile = null; for (String filename : this.dataDirectory.list()) { if (isDataFile(filename)) { dataFile = new File(this.dataDirectory, filename); break; } } if (dataFile == null) { throw new IOException("No data file found"); } File clazzFile = new File(dataDirectory, "clazz"); if (clazzFile.exists()) { clazz = new String(Files.readAllBytes(clazzFile.toPath())).trim(); } final GeoTiffReader geotiffReader = new GeoTiffReader(dataFile, hints); this.crs = geotiffReader.getCoordinateReferenceSystem(); this.originalGridRange = geotiffReader.getOriginalGridRange(); this.originalEnvelope = geotiffReader.getOriginalEnvelope(); }
@Test public void testScaleToExtentXML() throws Exception { final File xml = new File("./src/test/resources/requestGetCoverageScaleToExtent.xml"); final String request = FileUtils.readFileToString(xml); MockHttpServletResponse response = postAsServletResponse("wcs", request); assertEquals("image/tiff", response.getContentType()); byte[] tiffContents = getBinary(response); File file = File.createTempFile("bm_gtiff", "bm_gtiff.tiff", new File("./target")); FileUtils.writeByteArrayToFile(file, tiffContents); // check the tiff structure is the one requested final GeoTiffReader reader = new GeoTiffReader(file); assertTrue( CRS.equalsIgnoreMetadata( reader.getCoordinateReferenceSystem(), CRS.decode("EPSG:4326", true))); assertEquals(200, reader.getOriginalGridRange().getSpan(0)); assertEquals(300, reader.getOriginalGridRange().getSpan(1)); final GridCoverage2D coverage = reader.read(null); assertNotNull(coverage); assertEnvelopeEquals(sourceCoverage, coverage); reader.dispose(); scheduleForCleaning(coverage); }
@Test public void reprojectTo3857XML() throws Exception { final File xml = new File("./src/test/resources/crs/requestGetCoverageOutputCRS.xml"); final String request = FileUtils.readFileToString(xml); MockHttpServletResponse response = postAsServletResponse("wcs", request); assertEquals("image/tiff", response.getContentType()); byte[] tiffContents = getBinary(response); File file = File.createTempFile("bm_gtiff", "bm_gtiff.tiff", new File("./target")); FileUtils.writeByteArrayToFile(file, tiffContents); GeoTiffReader readerTarget = new GeoTiffReader(file); GridCoverage2D targetCoverage = null; try { targetCoverage = readerTarget.read(null); final CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:3857", true); Assert.assertTrue( CRS.equalsIgnoreMetadata( targetCoverage.getCoordinateReferenceSystem(), targetCRS)); final GridEnvelope gridRange = targetCoverage.getGridGeometry().getGridRange(); expectedEnvelope, scale, (GeneralEnvelope) targetCoverage.getEnvelope(), scale); assertEquals(gridRange.getSpan(0), 360); assertEquals(gridRange.getSpan(1), 360); readerTarget.dispose(); } catch (Exception e) {
@Test public void testDatelineCrossingPolar() throws Exception { final File xml = new File("./src/test/resources/requestGetCoverageAcrossDatelinePolar.xml"); final String request = FileUtils.readFileToString(xml); MockHttpServletResponse response = postAsServletResponse("wcs", request); assertEquals("image/tiff", response.getContentType()); byte[] tiffContents = getBinary(response); File file = File.createTempFile("polar_gtiff", "polar_gtiff.tiff", new File("./target")); FileUtils.writeByteArrayToFile(file, tiffContents); GeoTiffReader readerTarget = new GeoTiffReader(file); GridCoverage2D targetCoverage = null; try { targetCoverage = readerTarget.read(null); Envelope2D envelope = targetCoverage.getEnvelope2D(); assertEquals(-1139998, envelope.getMinX(), 1d); assertEquals(-3333134, envelope.getMinY(), 1d); assertEquals(1139998, envelope.getMaxX(), 1d); assertEquals(-1023493, envelope.getMaxY(), 1d); assertTrue( CRS.equalsIgnoreMetadata( CRS.decode("EPSG:3031", true), targetCoverage.getCoordinateReferenceSystem2D())); readerTarget.dispose(); scheduleForCleaning(targetCoverage);
assertEquals("image/tiff", response.getContentType()); String contentDisposition = response.getHeader("Content-disposition"); assertEquals("inline; filename=wcs__BlueMarble.tif", contentDisposition); FileUtils.writeByteArrayToFile(file, tiffContents); GeoTiffReader readerTarget = new GeoTiffReader(file); GridCoverage2D targetCoverage = null, sourceCoverage = null; try { targetCoverage = readerTarget.read(null); sourceCoverage = (GridCoverage2D) assertEquals( sourceCoverage.getGridGeometry().getGridRange(), targetCoverage.getGridGeometry().getGridRange()); assertEquals( sourceCoverage.getCoordinateReferenceSystem(), targetCoverage.getCoordinateReferenceSystem()); assertEquals(sourceCoverage.getEnvelope(), targetCoverage.getEnvelope()); } finally { try { readerTarget.dispose(); } catch (Exception e) {
.getGridCoverageReader(null, null) .read(null); final Envelope2D sourceEnvelope = sourceCoverage.getEnvelope2D(); + ")"); assertEquals("image/tiff", response.getContentType()); byte[] tiffContents = getBinary(response); File file = File.createTempFile("bm_gtiff", "bm_gtiff.tiff", new File("./target")); FileUtils.writeByteArrayToFile(file, tiffContents); readerTarget = new GeoTiffReader(file); targetCoverage = readerTarget.read(null); assertEquals( sourceCoverage.getCoordinateReferenceSystem(), targetCoverage.getCoordinateReferenceSystem()); assertEquals(1, targetCoverage.getGridGeometry().getGridRange().getSpan(0)); assertEquals(180, targetCoverage.getGridGeometry().getGridRange().getSpan(1)); assertEquals(0, targetCoverage.getGridGeometry().getGridRange().getLow(0)); assertEquals(0, targetCoverage.getGridGeometry().getGridRange().getLow(1)); try { if (readerTarget != null) { readerTarget.dispose();
void testCoverageResult(File xml, GridTester tester) throws Exception { final String request = FileUtils.readFileToString(xml, "UTF-8"); MockHttpServletResponse response = postAsServletResponse("wcs", request); assertEquals("image/tiff", response.getContentType()); byte[] tiffContents = getBinary(response); File file = File.createTempFile("borderOverlap", "borderOverlap.tiff", new File("./target")); FileUtils.writeByteArrayToFile(file, tiffContents); GeoTiffReader readerTarget = new GeoTiffReader(file); GridCoverage2D targetCoverage = null; try { targetCoverage = readerTarget.read(null); tester.test(targetCoverage); } finally { try { readerTarget.dispose(); } catch (Exception e) { // TODO: handle exception } try { scheduleForCleaning(targetCoverage); } catch (Exception e) { // TODO: handle exception } } }
GeoTiffReader readerTarget = new GeoTiffReader(file); GridCoverage2D targetCoverage = null, sourceCoverage = null; try { targetCoverage = readerTarget.read(null); sourceCoverage = (GridCoverage2D) assertEquals( sourceCoverage.getCoordinateReferenceSystem(), targetCoverage.getCoordinateReferenceSystem()); assertEnvelopeEquals(sourceCoverage, targetCoverage); assertEquals(100, targetCoverage.getGridGeometry().getGridRange().getSpan(0)); assertEquals(100, targetCoverage.getGridGeometry().getGridRange().getSpan(1)); } finally { try { readerTarget.dispose(); } catch (Exception e) { LOGGER.log(Level.WARNING, e.getLocalizedMessage(), e); readerTarget = new GeoTiffReader(file); try { targetCoverage = readerTarget.read(null); sourceCoverage = (GridCoverage2D) } finally { try { readerTarget.dispose(); } catch (Exception e) {
"wcs?request=GetCoverage&service=WCS&version=2.0.1&coverageId=wcs__BlueMarble"); assertEquals("image/tiff", response.getContentType()); byte[] tiffContents = getBinary(response); File file = new File("./target/bm_full.tiff"); FileUtils.writeByteArrayToFile(file, tiffContents); GeoTiffReader readerTarget = new GeoTiffReader(file); GridCoverage2D targetCoverage = null, sourceCoverage = null; try { targetCoverage = readerTarget.read(null); sourceCoverage = (GridCoverage2D) sourceCoverage.getGridGeometry().getGridRange(), targetCoverage.getGridGeometry().getGridRange()); assertEquals( sourceCoverage.getCoordinateReferenceSystem(), targetCoverage.getCoordinateReferenceSystem()); assertEquals(sourceCoverage.getEnvelope(), targetCoverage.getEnvelope()); } finally { try { readerTarget.dispose(); } catch (Exception e) {
private void assertOriginPixelColor(MockHttpServletResponse response, int[] expected) throws DataSourceException, IOException { assertEquals("image/tiff", response.getContentType()); byte[] bytes = response.getContentAsByteArray(); GeoTiffReader reader = new GeoTiffReader(new ByteArrayInputStream(bytes)); GridCoverage2D coverage = reader.read(null); Raster raster = coverage.getRenderedImage().getData(); int[] pixel = new int[3]; raster.getPixel(0, 0, pixel); assertThat(pixel, equalTo(expected)); } }
@Test public void testConic() throws Exception { // setup a request large enough to cause severe reprojection deformation CoordinateReferenceSystem crs = CRS.decode("EPSG:32632", true); ReferencedEnvelope mapExtent = new ReferencedEnvelope(-1.5e7, 1.5e7, 0, 1e6, crs); // System.out.println(mapExtent.transform(DefaultGeographicCRS.WGS84, true)); GridCoverageReaderHelper helper = new GridCoverageReaderHelper( reader, new Rectangle(400, 200), mapExtent, Interpolation.getInstance(Interpolation.INTERP_NEAREST)); // read single coverage with no projection handling, we should get the full requested area GridCoverage2D coverage = helper.readCoverage(null); Envelope2D envelope = coverage.getEnvelope2D(); // System.out.println(envelope); assertTrue(envelope.getMinX() < -100); assertTrue(envelope.getMaxX() > 100); // now read via the projection handlers ProjectionHandler handler = ProjectionHandlerFinder.getHandler( mapExtent, reader.getCoordinateReferenceSystem(), true); List<GridCoverage2D> coverages = helper.readCoverages(null, handler); // System.out.println(coverages); assertEquals(1, coverages.size()); envelope = coverages.get(0).getEnvelope2D(); // west/east limited to 45 degrees from the central meridian assertEquals(-36, envelope.getMinX(), EPS); assertEquals(54, envelope.getMaxX(), EPS); }
graphics.dispose(); CoordinateReferenceSystem nativeCrs = CRS.decode("EPSG:4326", true); ReferencedEnvelope mapExtent = new ReferencedEnvelope(0, 90, 0, 90, nativeCrs); GridCoverage2D coverage = .create("test", bi, new ReferencedEnvelope(0, 90, 0, 90, nativeCrs)); assertEquals(coverage.getNumSampleDimensions(), 3); GridCoverage2DReader reader = new GeoTiffReader(coverageFile);
.getGridCoverageReader(null, null) .read(null); final Envelope2D sourceEnvelope = sourceCoverage.getEnvelope2D(); + sourceEnvelope.y * 0.9 + ")"); assertEquals("application/xml", response.getContentType()); checkOws20Exception( response, + (sourceEnvelope.y + sourceEnvelope.height / 2) + ")"); assertEquals("application/xml", response.getContentType()); checkOws20Exception( response, try { if (readerTarget != null) { readerTarget.dispose();
CoordinateReferenceSystem nativeCrs = CRS.decode("EPSG:26915", true); GridCoverage2D coverage = CoverageFactoryFinder.getGridCoverageFactory(null) MathTransform r2m = coverage.getGridGeometry().getGridToCRS(); Envelope env = new Envelope(25, 75, 25, 75); ReferencedEnvelope read26915 = new ReferencedEnvelope(JTS.transform(env, r2m), nativeCrs); CoordinateReferenceSystem mapCRS = CRS.decode("EPSG:3857", true); ReferencedEnvelope read3857 = read26915.transform(mapCRS, true); Layer layer = new GridReaderLayer( new GeoTiffReader(testFile), sb.createStyle(sb.createRasterSymbolizer())); MapContent mc = new MapContent(); mc.getViewport().setBounds(read3857);
@Test public void testTransformReprojectedGridCoverage() throws Exception { Style style = RendererBaseTest.loadStyle(this, "coverageCenter.sld"); GeoTiffReader reader = new GeoTiffReader(TestData.copy(this, "geotiff/world.tiff")); MapContent mc = new MapContent(); mc.addLayer(new GridCoverageLayer(reader.read(null), style)); StreamingRenderer renderer = new StreamingRenderer(); renderer.setMapContent(mc); ReferencedEnvelope reWgs84 = new ReferencedEnvelope(-70, 70, -160, 160, CRS.decode("EPSG:4326")); ReferencedEnvelope re = reWgs84.transform(CRS.decode("EPSG:3857"), true); BufferedImage image = RendererBaseTest.showRender("Lines with circle stroke", renderer, TIME, re); // if everything worked we are going to have a red dot in the middle of the map assertEquals(Color.RED, getPixelColor(image, image.getWidth() / 2, image.getHeight() / 2)); assertEquals( Color.WHITE, getPixelColor(image, image.getWidth() / 4, image.getHeight() / 2)); assertEquals( Color.WHITE, getPixelColor(image, image.getWidth() / 2, image.getHeight() / 4)); assertEquals( Color.WHITE, getPixelColor(image, image.getWidth() / 4, image.getHeight() / 4)); }
@Test public void testTransformReprojectedGridReader() throws Exception { Style style = RendererBaseTest.loadStyle(this, "coverageCenter.sld"); GeoTiffReader reader = new GeoTiffReader(TestData.copy(this, "geotiff/world.tiff")); MapContent mc = new MapContent(); mc.addLayer(new GridReaderLayer(reader, style)); StreamingRenderer renderer = new StreamingRenderer(); renderer.setMapContent(mc); ReferencedEnvelope reWgs84 = new ReferencedEnvelope(-70, 70, -160, 160, CRS.decode("EPSG:4326")); ReferencedEnvelope re = reWgs84.transform(CRS.decode("EPSG:3857"), true); BufferedImage image = RendererBaseTest.showRender("Lines with circle stroke", renderer, TIME, re); // if everything worked we are going to have a red dot in the middle of the map assertEquals(Color.RED, getPixelColor(image, image.getWidth() / 2, image.getHeight() / 2)); assertEquals( Color.WHITE, getPixelColor(image, image.getWidth() / 4, image.getHeight() / 2)); assertEquals( Color.WHITE, getPixelColor(image, image.getWidth() / 2, image.getHeight() / 4)); assertEquals( Color.WHITE, getPixelColor(image, image.getWidth() / 4, image.getHeight() / 4)); }
GridCoverage2D coverage = (GridCoverage2D) value; CoordinateReferenceSystem crs = coverage.getCoordinateReferenceSystem(); boolean unreferenced = crs == null || crs instanceof EngineeringCRS; final Object fileSource = coverage.getProperty(AbstractGridCoverage2DReader.FILE_SOURCE_PROPERTY); if (fileSource != null && fileSource instanceof String) { File file = new File((String) fileSource); reader = new GeoTiffReader(file); reader.read(null); reader.dispose(); new ImageWorker(coverage.getRenderedImage()).writeTIFF(os, "LZW", 0.75f, 256, 256); } else { GeoTiffFormat format = new GeoTiffFormat();
@Test public void testOutsideDefinitionArea() throws Exception { // setup a request that is outside of the coverage CoordinateReferenceSystem crs = CRS.decode("EPSG:3031", true); ReferencedEnvelope mapExtent = new ReferencedEnvelope(-1250000, 0, -13750000, -12500000, crs); // System.out.println(mapExtent.transform(DefaultGeographicCRS.WGS84, true)); GridCoverageReaderHelper helper = new GridCoverageReaderHelper( reader, new Rectangle(400, 200), mapExtent, Interpolation.getInstance(Interpolation.INTERP_NEAREST)); // read, nothing should come out ProjectionHandler handler = ProjectionHandlerFinder.getHandler( mapExtent, reader.getCoordinateReferenceSystem(), true); List<GridCoverage2D> coverages = helper.readCoverages(null, handler); assertTrue(coverages.isEmpty()); }