+ coverageName + ", result has envelope " + coverage.getEnvelope2D());
JTS.toGeometry((Envelope) new ReferencedEnvelope(grid.getEnvelope2D())); if (coverageBounds.intersects(rasterFilter)) { final ParameterValueGroup param = cropParams.clone();
/** * Checks if any coverage in the list already fully contains the area of the test coverage * * @param coverages * @param test * @return */ private boolean coveragesContainArea(List<GridCoverage2D> coverages, GridCoverage2D test) { for (GridCoverage2D coverage : coverages) { if (coverage.getEnvelope2D().contains((BoundingBox) test.getEnvelope2D())) { return true; } } return false; }
/** * Layer bounds generated from the grid coverage. * * @return layer bounds generated from the grid coverage. */ public ReferencedEnvelope getBounds() { if (coverage != null) { CoordinateReferenceSystem crs = coverage.getCoordinateReferenceSystem(); Envelope2D bounds = coverage.getEnvelope2D(); if (bounds != null) { return new ReferencedEnvelope(bounds); } else if (crs != null) { return new ReferencedEnvelope(crs); } } return null; }
/** * This method creates a new {@link GridGeometry2D} object based on that of the {@link * GridCoverage2D} defined by the index. * * @param sources * @param index * @return */ private static GridGeometry2D extractFinalGridGeometry( GridCoverage2D[] sources, int index) { // Select the GridGeometry of the first coverage GridGeometry2D gg = sources[index].getGridGeometry(); MathTransform g2w = gg.getGridToCRS2D(PixelOrientation.UPPER_LEFT); // Initial Bounding box Envelope2D bbox = gg.getEnvelope2D(); // Number of the sources to use int numSources = sources.length; // Cycle on all the GridCoverages in order to create the final Bounding box for (int i = 0; i < numSources; i++) { bbox.include(sources[i].getEnvelope2D()); } // Creation of a final GridGeometry containing the final Bounding Box GridGeometry2D finalGG = new GridGeometry2D( PixelInCell.CELL_CORNER, g2w, bbox, GeoTools.getDefaultHints()); return finalGG; } }
@Override public InfoToolResult getInfo(DirectPosition2D pos) throws Exception { InfoToolResult result = new InfoToolResult(); if (isValid()) { GridCoverage2D source = ((GridCoverageLayer) getLayer()).getCoverage(); ReferencedEnvelope env = new ReferencedEnvelope(source.getEnvelope2D()); DirectPosition2D trPos = InfoToolHelperUtils.getTransformed(pos, getContentToLayerTransform()); if (env.contains(trPos)) { Object objArray = source.evaluate(trPos); Number[] bandValues = InfoToolHelperUtils.asNumberArray(objArray); if (bandValues != null) { result.newFeature("Raw values"); for (int i = 0; i < bandValues.length; i++) { result.setFeatureValue("Band " + i, bandValues[i]); } } } } return result; } }
public static JGrassRegion getJGrassRegionFromGridCoverage(GridCoverage2D gridCoverage2D) throws InvalidGridGeometryException, TransformException { Envelope2D env = gridCoverage2D.getEnvelope2D(); GridEnvelope2D worldToGrid = gridCoverage2D.getGridGeometry().worldToGrid(env); double xRes = env.getWidth() / worldToGrid.getWidth(); double yRes = env.getHeight() / worldToGrid.getHeight(); JGrassRegion region = new JGrassRegion( env.getMinX(), env.getMaxX(), env.getMinY(), env.getMaxY(), xRes, yRes); return region; }
/** * Returns a two-dimensional envelope for the given coverage. This method performs a <cite>best * effort</cite>; the returned envelope is not garanteed to be the most appropriate one. * * @param coverage The coverage for which to obtains a two-dimensional envelope. * @return The two-dimensional envelope. * @throws MismatchedDimensionException if the envelope can't be reduced to two dimensions. */ public static Envelope2D getEnvelope2D(final Coverage coverage) throws MismatchedDimensionException { if (coverage instanceof GridCoverage2D) { return ((GridCoverage2D) coverage).getEnvelope2D(); } if (coverage instanceof GridCoverage) { final GridGeometry2D geometry = GridGeometry2D.wrap(((GridCoverage) coverage).getGridGeometry()); if (geometry.isDefined(GridGeometry2D.ENVELOPE_BITMASK)) { return geometry.getEnvelope2D(); } else { return geometry.reduce(coverage.getEnvelope()); } } // Following may thrown MismatchedDimensionException. return new Envelope2D(coverage.getEnvelope()); }
ReferencedEnvelope.reference(readingGridGeometry.getEnvelope2D()); ReferencedEnvelope coverageEnvelope = ReferencedEnvelope.reference(coverage.getEnvelope2D()); Polygon coverageFootprint = JTS.toGeometry(coverageEnvelope); Geometry preProcessed = handler.preProcess(coverageFootprint);
@Test public void testUTM() 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, plus reading gutter assertEquals(-36, envelope.getMinX(), EPS); assertEquals(54, envelope.getMaxX(), EPS); }
@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); }
new GeneralEnvelope((BoundingBox) coverage.getEnvelope2D()); this.originalGridRange = coverage.getGridGeometry().getGridRange();
@Override public InfoToolResult getInfo(DirectPosition2D pos) throws Exception { InfoToolResult result = new InfoToolResult(); if (isValid()) { DirectPosition trPos = InfoToolHelperUtils.getTransformed(pos, getContentToLayerTransform()); if (cachedCoverage == null || !cachedCoverage.getEnvelope2D().contains(trPos)) { if (!renewCachedCoverage(trPos)) { return result; } } try { Object objArray = cachedCoverage.evaluate(trPos); Number[] bandValues = InfoToolHelperUtils.asNumberArray(objArray); if (bandValues != null) { result.newFeature("Raw values"); for (int i = 0; i < bandValues.length; i++) { result.setFeatureValue("Band " + i, bandValues[i]); } } } catch (PointOutsideCoverageException e) { // The empty result will be returned } } return result; }
GridCoverage2D coverage = multiPixelPacked.read(null); RenderedImage image = coverage.getRenderedImage(); ReferencedEnvelope mapExtent = ReferencedEnvelope.reference(coverage.getEnvelope2D()); Rectangle screenSize = new Rectangle(
@Test public void testGeographicLarge() throws Exception { ReferencedEnvelope mapExtent = new ReferencedEnvelope(-360, 360, -90, 90, DefaultGeographicCRS.WGS84); GridCoverageReaderHelper helper = new GridCoverageReaderHelper( reader, new Rectangle(720, 180), mapExtent, Interpolation.getInstance(Interpolation.INTERP_NEAREST)); // read single coverage with no projection handling GridCoverage2D coverage = helper.readCoverage(null); Envelope2D envelope = coverage.getEnvelope2D(); assertEquals(-180, envelope.getMinX(), EPS); assertEquals(180, envelope.getMaxX(), EPS); assertEquals(-90, envelope.getMinY(), EPS); assertEquals(90, envelope.getMaxY(), EPS); // try multiple coverage with projection handling, should not make a difference // since we are already reading everything in a single shot, just in need of coverage // replication // (which has to be performed after the eventual reprojection, so not here in the reader) ProjectionHandler handler = ProjectionHandlerFinder.getHandler( mapExtent, reader.getCoordinateReferenceSystem(), true); List<GridCoverage2D> coverages = helper.readCoverages(null, handler); // System.out.println(coverages); assertEquals(1, coverages.size()); assertEquals(envelope, coverages.get(0).getEnvelope2D()); }
assertEquals(1, coverages.size()); GridCoverage2D coverage = coverages.get(0); Envelope2D envelope = coverage.getEnvelope2D(); final double EPS = 0.2; // this is the native resolution assertEquals(-180.4, envelope.getMinX(), EPS);
/** * Writes the {@link GridCoverage2D supplied coverage} to disk. * * <p>Note that this also takes care to cloes the file handle after writing to disk. * * @param gridCoverage2D the coverage to write. * @throws IOException */ public void writeRaster(GridCoverage2D gridCoverage2D) throws IOException { try { Envelope2D env = gridCoverage2D.getEnvelope2D(); GridEnvelope2D worldToGrid = gridCoverage2D.getGridGeometry().worldToGrid(env); double xRes = env.getWidth() / worldToGrid.getWidth(); double yRes = env.getHeight() / worldToGrid.getHeight(); JGrassRegion region = new JGrassRegion( env.getMinX(), env.getMaxX(), env.getMinY(), env.getMaxY(), xRes, yRes); GrassBinaryImageWriterSpi writerSpi = new GrassBinaryImageWriterSpi(); GrassBinaryImageWriter writer = new GrassBinaryImageWriter(writerSpi, monitor); RenderedImage renderedImage = gridCoverage2D.getRenderedImage(); writer.setOutput(output, region); writer.write(renderedImage); writer.dispose(); } catch (Exception e) { java.util.logging.Logger.getGlobal().log(java.util.logging.Level.INFO, "", e); } }
/** * Wraps a grid coverage into a Feature. Code lifted from ArcGridDataSource (temporary). * * @param coverage the grid coverage. * @return a feature with the grid coverage envelope as the geometry and the grid coverage * itself in the "grid" attribute. */ @SuppressWarnings("unchecked") public static SimpleFeatureCollection wrapGridCoverage(final GridCoverage2D coverage) throws TransformException, SchemaException { final Polygon bounds = getPolygon(coverage.getEnvelope2D()); final CoordinateReferenceSystem sourceCRS = coverage.getCoordinateReferenceSystem2D(); SimpleFeatureTypeBuilder ftb = new SimpleFeatureTypeBuilder(getTypeFactory()); ftb.setName("GridCoverage"); ftb.add("geom", Polygon.class, sourceCRS); ftb.add("grid", GridCoverage.class); SimpleFeatureType schema = ftb.buildFeatureType(); // create the feature SimpleFeatureBuilder fb = new SimpleFeatureBuilder(schema, getFeatureFactory()); fb.add(bounds); fb.add(coverage); SimpleFeature feature = fb.buildFeature(null); final DefaultFeatureCollection collection = new DefaultFeatureCollection(); collection.add(feature); return collection; }
Envelope2D envelope = coverage.getEnvelope2D(); assertEquals(-180, envelope.getMinX(), EPS); assertEquals(180, envelope.getMaxX(), EPS); Envelope2D firstEnvelope = coverages.get(0).getEnvelope2D(); assertEquals(169.2, firstEnvelope.getMinX(), EPS); assertEquals(180, firstEnvelope.getMaxX(), EPS); assertEquals(69.3, firstEnvelope.getMinY(), EPS); assertEquals(80.1, firstEnvelope.getMaxY(), EPS); Envelope2D secondEnvelope = coverages.get(1).getEnvelope2D(); assertEquals(-180, secondEnvelope.getMinX(), EPS); assertEquals(-169.2, secondEnvelope.getMaxX(), EPS);
@Override public GridCoverage2D read(GeneralParameterValue[] parameters) throws IOException { GridCoverage2D originalCoverage = super.read(parameters); RenderedImage source = new ImageWorker(originalCoverage.getRenderedImage()) .format(DataBuffer.TYPE_USHORT) .getRenderedImage(); TiledImage shortImage = new TiledImage( source.getMinX(), source.getMinY(), source.getWidth(), source.getHeight(), source.getTileGridXOffset(), source.getTileGridYOffset(), source.getSampleModel(), null); shortImage.set(source); // force color model to be null, this also occurs in real cases GridCoverage2D coverage = CoverageFactoryFinder.getGridCoverageFactory(null) .create( originalCoverage.getName(), shortImage, originalCoverage.getEnvelope2D()); return coverage; } };