@Override public GridCoverage2D getGridCoverage() { try { // There is a serious standardization failure around the axis order of WGS84. See issue #1930. // GeoTools assumes strict EPSG axis order of (latitude, longitude) unless told otherwise. // Both NED and SRTM data use the longitude-first axis order, so OTP makes grid coverages // for unprojected DEMs assuming coordinates are in (longitude, latitude) order. Hints forceLongLat = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE); GeoTiffFormat format = new GeoTiffFormat(); GeoTiffReader reader = format.getReader(path, forceLongLat); coverage = reader.read(null); LOG.info("Elevation model CRS is: {}", coverage.getCoordinateReferenceSystem2D()); } catch (IOException e) { throw new RuntimeException("Error getting coverage automatically. ", e); } return coverage; }
/** 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; }
@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 testMultiPixelPackedRender() throws Exception { GridCoverage2D coverage = multiPixelPacked.read(null); RenderedImage image = coverage.getRenderedImage(); ReferencedEnvelope mapExtent = ReferencedEnvelope.reference(coverage.getEnvelope2D());
/** * 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); }
public static GridCoverage2D openGeoTiffFile(String filePath) { GridCoverage2D gc2D = null; try { File gridFile = new File(filePath); Hints hints = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE); GeoTiffReader reader = new GeoTiffReader(gridFile, hints); try { gc2D = reader.read(null); } catch (IOException e) { LOGGER.log(Level.FINE, e.getMessage(), e); } } catch (DataSourceException e) { LOGGER.log(Level.FINE, e.getMessage(), e); } return gc2D; }
private GTRasterDataBinding parseTiff(File file){ Hints hints = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE); GeoTiffReader reader; try { reader = new GeoTiffReader(file, hints); GridCoverage2D coverage = (GridCoverage2D) reader.read(null); return new GTRasterDataBinding(coverage); } catch (Exception e) { LOGGER.error("Exception while trying to create GTRasterDataBinding out of tiff.", e); throw new RuntimeException(e); } }
private GTRasterDataBinding parseTiff(File file){ JAI.getDefaultInstance().getTileCache().setMemoryCapacity(256*1024*1024); Hints hints = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE); GeoTiffReader reader; try { reader = new GeoTiffReader(file, hints); GridCoverage2D coverage = (GridCoverage2D) reader.read(null); return new GTRasterDataBinding(coverage); } catch (DataSourceException e) { LOGGER.error(e.getMessage(), e); throw new RuntimeException(e); } catch (IOException e) { LOGGER.error(e.getMessage(), e); throw new RuntimeException(e); } }
public ElevationDataParser(String tiffFile, String scenarioCRS) { this.ct = TransformationFactory.getCoordinateTransformation(scenarioCRS, "EPSG:4326"); GeoTiffReader reader = null; try { reader = new GeoTiffReader(tiffFile); } catch (DataSourceException e) { e.printStackTrace(); } try { grid = reader.read(null); } catch (IOException e) { e.printStackTrace(); } gridData = grid.getRenderedImage().getData(); }
private void checkPixelValue(MockHttpServletResponse response, int x, int y, double value) throws IOException, FileNotFoundException, DataSourceException { // save File tiffFile = File.createTempFile("wcs", "", new File("target")); try { IOUtils.copy(getBinaryInputStream(response), new FileOutputStream(tiffFile)); // make sure we can read the coverage back GeoTiffReader reader = new GeoTiffReader(tiffFile); GridCoverage2D result = reader.read(null); // check a pixel double[] pixel = new double[1]; result.getRenderedImage().getData().getPixel(x, y, pixel); assertEquals(value, pixel[0], 1e-6); } finally { tiffFile.delete(); } }
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)); } }
private void checkTimeFirst(MockHttpServletResponse response) throws IOException, FileNotFoundException, DataSourceException { // save File tiffFile = File.createTempFile("wcs", "", new File("target")); IOUtils.copy(getBinaryInputStream(response), new FileOutputStream(tiffFile)); // make sure we can read the coverage back GeoTiffReader reader = new GeoTiffReader(tiffFile); GridCoverage2D result = reader.read(null); /* gdallocationinfo NCOM_wattemp_000_20081031T0000000_12.tiff 10 10 Report: Location: (10P,10L) Band 1: Value: 18.2659999176394 */ // check a pixel double[] pixel = new double[1]; result.getRenderedImage().getData().getPixel(10, 10, pixel); assertEquals(18.2659999176394, pixel[0], 1e-6); tiffFile.delete(); }
private void checkTimeCurrent(MockHttpServletResponse response) throws IOException, FileNotFoundException, DataSourceException { // save File tiffFile = File.createTempFile("wcs", "", new File("target")); IOUtils.copy(getBinaryInputStream(response), new FileOutputStream(tiffFile)); // make sure we can read the coverage back GeoTiffReader reader = new GeoTiffReader(tiffFile); GridCoverage2D result = reader.read(null); /* gdallocationinfo NCOM_wattemp_000_20081101T0000000_12.tiff 10 10 Report: Location: (10P,10L) Band 1: Value: 18.2849999185419 */ // check a pixel double[] pixel = new double[1]; result.getRenderedImage().getData().getPixel(10, 10, pixel); assertEquals(18.2849999185419, pixel[0], 1e-6); tiffFile.delete(); }
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 } } }
@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 testScaleAxesByFactorXML() throws Exception { final File xml = new File("./src/test/resources/requestGetCoverageScaleAxesByFactor.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(1260, reader.getOriginalGridRange().getSpan(0)); assertEquals(1260, reader.getOriginalGridRange().getSpan(1)); final GridCoverage2D coverage = reader.read(null); assertNotNull(coverage); assertEnvelopeEquals(sourceCoverage, coverage); reader.dispose(); scheduleForCleaning(coverage); }
@Test public void testScaleToSizeXML() throws Exception { final File xml = new File("./src/test/resources/requestGetCoverageScaleToSize.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(1000, reader.getOriginalGridRange().getSpan(0)); assertEquals(1000, reader.getOriginalGridRange().getSpan(1)); final GridCoverage2D coverage = reader.read(null); assertNotNull(coverage); assertEnvelopeEquals(sourceCoverage, coverage); reader.dispose(); scheduleForCleaning(coverage); }
@Test public void testScaleByFactorXML() throws Exception { final File xml = new File("./src/test/resources/requestGetCoverageScaleByFactor.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(900, reader.getOriginalGridRange().getSpan(0)); assertEquals(900, reader.getOriginalGridRange().getSpan(1)); final GridCoverage2D coverage = reader.read(null); assertNotNull(coverage); assertEnvelopeEquals(sourceCoverage, coverage); reader.dispose(); scheduleForCleaning(coverage); } }
public void testElevationSecond() throws Exception { String request = getWaterTempElevationRequest("100.0"); MockHttpServletResponse response = postAsServletResponse("wcs", request); assertEquals("image/tiff;subtype=\"geotiff\"", response.getContentType()); // save File tiffFile = File.createTempFile("wcs", "", new File("target")); IOUtils.copy(getBinaryInputStream(response), new FileOutputStream(tiffFile)); // make sure we can read the coverage back GeoTiffReader reader = new GeoTiffReader(tiffFile); GridCoverage2D result = reader.read(null); /* gdallocationinfo NCOM_wattemp_100_20081101T0000000_12.tiff 10 10 Report: Location: (10P,10L) Band 1: Value: 13.337999683572 */ // check a pixel double[] pixel = new double[1]; result.getRenderedImage().getData().getPixel(10, 10, pixel); assertEquals(13.337999683572, pixel[0], 1e-6); tiffFile.delete(); }
@Test public void testRange() throws Exception { MockHttpServletResponse response = getAsServletResponse( "wcs?request=GetCoverage&service=WCS&version=2.0.1" + "&coverageId=wcs__BlueMarble&&Format=image/tiff&RANGESUBSET=RED_BAND:BLUE_BAND"); 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); final GeoTiffReader reader = new GeoTiffReader(file); assertTrue( CRS.equalsIgnoreMetadata( reader.getCoordinateReferenceSystem(), CRS.decode("EPSG:4326", true))); assertEquals(360, reader.getOriginalGridRange().getSpan(0)); assertEquals(360, reader.getOriginalGridRange().getSpan(1)); final GridCoverage2D coverage = reader.read(null); assertEquals(3, coverage.getSampleDimensions().length); GridCoverage2D sourceCoverage = (GridCoverage2D) this.getCatalog() .getCoverageByName("BlueMarble") .getGridCoverageReader(null, null) .read(null); assertEnvelopeEquals(sourceCoverage, coverage); reader.dispose(); scheduleForCleaning(coverage); scheduleForCleaning(sourceCoverage); }