throws ServiceException, IOException { PrintStream ps = new PrintStream(output); ps.println("Grid bounds: " + coverage.getEnvelope()); ps.println("Grid CRS: " + coverage.getCoordinateReferenceSystem()); ps.println("Grid range: " + coverage.getGridGeometry().getGridRange());
/** 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; }
/** * Crops the coverage to the specified bounds * * @param coverage * @param bounds */ public static GridCoverage2D crop(final GridCoverage2D coverage, final Envelope bounds) { // checks final ReferencedEnvelope cropBounds = new ReferencedEnvelope(bounds); final ReferencedEnvelope coverageBounds = new ReferencedEnvelope(coverage.getEnvelope()); if (cropBounds.contains((org.locationtech.jts.geom.Envelope) coverageBounds)) { return coverage; } Polygon polygon = JTS.toGeometry(cropBounds); Geometry roi = polygon.getFactory().createMultiPolygon(new Polygon[] {polygon}); // perform the crops final ParameterValueGroup param = PROCESSOR.getOperation("CoverageCrop").getParameters(); param.parameter("Source").setValue(coverage); param.parameter("Envelope").setValue(bounds); param.parameter("ROI").setValue(roi); return (GridCoverage2D) PROCESSOR.doOperation(param); }
"result", worker.getRenderedImage(), returnValues.get(0).getEnvelope(), sds, null,
static ReferencedEnvelope findBounds(GridCoverage2D raster) { org.opengis.geometry.Envelope e = raster.getEnvelope(); return new ReferencedEnvelope( e.getMinimum(0), e.getMaximum(0), e.getMinimum(1), e.getMaximum(1), raster.getCoordinateReferenceSystem()); }
HashMap<String, Double> envelopeParams = new HashMap<String, Double>(); Envelope envelope = gridCoverage.getEnvelope();
assertCoverageResolution(coverage, 1007, 1007); assertEquals(coverage.getEnvelope(), envelope); } finally { getCatalog().remove(info);
private GridCoverage2D cropCoverageOnRequestedEnvelope(GridCoverage2D readCoverage) { if (readCoverage == null) { return null; } try { ReferencedEnvelope requested = ReferencedEnvelope.reference(requestedGridGeometry.getEnvelope()); ReferencedEnvelope requestedNativeCRS = requested.transform(readCoverage.getCoordinateReferenceSystem(), true); ReferencedEnvelope coverageEnvelope = ReferencedEnvelope.reference(readCoverage.getEnvelope()); ReferencedEnvelope cropEnvelope = new ReferencedEnvelope( requestedNativeCRS.intersection(coverageEnvelope), readCoverage.getCoordinateReferenceSystem()); if (isNotEmpty(cropEnvelope)) { GridCoverage2D cropCoverage = cropCoverage(readCoverage, requestedNativeCRS); return cropCoverage; } else { return null; } } catch (Exception e) { LOGGER.log( Level.FINE, "Failed to crop coverage on the requested area, using the original one", e); return readCoverage; } }
@Test public void testZoomlevel3() throws IOException { MBTilesReader reader = new MBTilesReader(getClass().getResource("world_lakes.mbtiles"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D( new GridEnvelope2D(new Rectangle(500, 500)), new ReferencedEnvelope(0, 90.0, -85.0, 0, MBTilesReader.WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read(parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0), 0.01); assertEquals(-20037508.34, gc.getEnvelope().getMinimum(1), 0.01); assertEquals(15028131.25, gc.getEnvelope().getMaximum(0), 0.01); assertEquals(0, gc.getEnvelope().getMaximum(1), 0.01); assertEquals(768, img.getWidth()); assertEquals(1024, img.getHeight()); }
@Test public void testZoomlevel4() throws IOException { MBTilesReader reader = new MBTilesReader(getClass().getResource("world_lakes.mbtiles"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D( new GridEnvelope2D(new Rectangle(500, 500)), new ReferencedEnvelope(0, 45.0, -85.0, 0, MBTilesReader.WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read(parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0), 0.01); assertEquals(-20037508.34, gc.getEnvelope().getMinimum(1), 0.01); assertEquals(7514065.62, gc.getEnvelope().getMaximum(0), 0.01); assertEquals(0, gc.getEnvelope().getMaximum(1), 0.01); assertEquals(768, img.getWidth()); assertEquals(2048, img.getHeight()); } }
@Test public void testZoomlevel2() throws IOException { MBTilesReader reader = new MBTilesReader(getClass().getResource("world_lakes.mbtiles"), null); GeneralParameterValue[] parameters = new GeneralParameterValue[1]; GridGeometry2D gg = new GridGeometry2D( new GridEnvelope2D(new Rectangle(500, 500)), new ReferencedEnvelope(0, 180.0, -85.0, 0, MBTilesReader.WGS_84)); parameters[0] = new Parameter<GridGeometry2D>(AbstractGridFormat.READ_GRIDGEOMETRY2D, gg); GridCoverage2D gc = reader.read(parameters); RenderedImage img = gc.getRenderedImage(); assertEquals(0, gc.getEnvelope().getMinimum(0), 0.01); assertEquals(-20037508.34, gc.getEnvelope().getMinimum(1), 0.01); assertEquals(20037508.34, gc.getEnvelope().getMaximum(0), 0.01); assertEquals(0, gc.getEnvelope().getMaximum(1), 0.01); assertEquals(512, img.getWidth()); assertEquals(512, img.getHeight()); // ImageIO.write(img, "png", URLs.urlToFile(getClass().getResource("world_lakes.png"))); ImageAssert.assertEquals( URLs.urlToFile(getClass().getResource("world_lakes.png")), img, 250); }
result.getName(), result.getRenderedImage(), result.getEnvelope());
Envelope coverageEnvelope = coverage.getEnvelope(); assertEquals(399960, coverageEnvelope.getMinimum(0), 1); assertEquals(5190240, coverageEnvelope.getMinimum(1), 1);
private BufferedImage composeFts(GridCoverage2D first, GridCoverage2D second) { // build the map content MapContent mc = new MapContent(); StyleBuilder sb = new StyleBuilder(); Style baseStyle = sb.createStyle(sb.createRasterSymbolizer()); mc.addLayer(new GridCoverageLayer(first, baseStyle)); FeatureTypeStyle compositeFts = sb.createFeatureTypeStyle(sb.createRasterSymbolizer()); compositeFts.getOptions().put(FeatureTypeStyle.COMPOSITE, composite); Style compositeStyle = sb.createStyle(); compositeStyle.featureTypeStyles().add(compositeFts); mc.addLayer(new GridCoverageLayer(second, compositeStyle)); // prepare the graphics for the streaming renderer and paint RenderedImage referenceImage = first.getRenderedImage(); BufferedImage blended = new BufferedImage( referenceImage.getWidth(), referenceImage.getWidth(), BufferedImage.TYPE_4BYTE_ABGR); Graphics2D graphics = blended.createGraphics(); StreamingRenderer sr = new StreamingRenderer(); sr.setMapContent(mc); sr.paint( graphics, new Rectangle(0, 0, referenceImage.getWidth(), referenceImage.getHeight()), ReferencedEnvelope.reference(first.getEnvelope())); graphics.dispose(); mc.dispose(); return blended; }
graphics, new Rectangle(0, 0, referenceImage.getWidth(), referenceImage.getHeight()), ReferencedEnvelope.reference(first.getEnvelope())); graphics.dispose(); mc.dispose();
graphics, new Rectangle(0, 0, referenceImage.getWidth(), referenceImage.getHeight()), ReferencedEnvelope.reference(first.getEnvelope())); graphics.dispose(); mc.dispose();
graphics, new Rectangle(0, 0, referenceImage.getWidth(), referenceImage.getHeight()), ReferencedEnvelope.reference(first.getEnvelope())); graphics.dispose(); mc.dispose();
Envelope envelope = gc.getEnvelope(); assertEquals(-90, envelope.getMinimum(0), EPS); assertEquals(0, envelope.getMaximum(0), EPS);
/** * Cropping the provided coverage to the requested geographic area. * * @param gc * @param envelope * @param crs * @return */ static GridCoverage2D crop( GridCoverage2D gc, GeneralEnvelope envelope, double[] background, final Hints hints) { final GeneralEnvelope oldEnvelope = (GeneralEnvelope) gc.getEnvelope(); // intersect the envelopes in order to prepare for cropping the coverage // down to the neded resolution final GeneralEnvelope intersectionEnvelope = new GeneralEnvelope(envelope); intersectionEnvelope.setCoordinateReferenceSystem(envelope.getCoordinateReferenceSystem()); intersectionEnvelope.intersect(oldEnvelope); // Do we have something to show? After the crop I could get a null // coverage which would mean nothing to show. if (intersectionEnvelope.isEmpty()) { return null; } // crop final ParameterValueGroup param = processor.getOperation("CoverageCrop").getParameters().clone(); param.parameter("source").setValue(gc); param.parameter("Envelope").setValue(intersectionEnvelope); return (GridCoverage2D) ((Crop) processor.getOperation("CoverageCrop")).doOperation(param, hints); }
public Object evaluate(Object gc) { GridCoverage2D coverage = (GridCoverage2D) gc; Envelope env = coverage.getEnvelope(); GeometryFactory gf = new GeometryFactory(); Point center = gf.createPoint(new Coordinate(env.getMedian(0), env.getMedian(1))); SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder(); tb.setName("center"); tb.add("geom", Point.class, coverage.getCoordinateReferenceSystem2D()); SimpleFeatureType ft = tb.buildFeatureType(); SimpleFeatureBuilder fb = new SimpleFeatureBuilder(ft); fb.add(center); SimpleFeature f = fb.buildFeature(null); return DataUtilities.collection(f); } }