Tile(TileRequest req) { GridEnvelope2D gridEnv = new GridEnvelope2D(0, 0, req.width, req.height); this.gg = new GridGeometry2D(gridEnv, (org.opengis.geometry.Envelope)(req.bbox)); // TODO: check that gg intersects graph area LOG.debug("preparing tile for {}", gg.getEnvelope2D()); // Envelope2D worldEnv = gg.getEnvelope2D(); this.width = gridEnv.width; this.height = gridEnv.height; }
@Override public void createIndividuals() { try { coverageCRS = CRS.decode(crsCode, true); } catch (Exception e) { LOG.error("error decoding coordinate reference system code.", e); return; } if (boundsFromGraph) { // autowire graph service or pass in } gridEnvelope = new GridEnvelope2D(0, 0, cols, rows); refEnvelope = new ReferencedEnvelope(left, right, bottom, top, coverageCRS); gridGeometry = new GridGeometry2D(gridEnvelope, refEnvelope); super.createIndividuals0(); }
new DefaultMathTransformFactory() .createAffineTransform(new GeneralMatrix(3, 3, matrix)); coverage.setGrid(new GridGeometry2D(range, gridToCRS, crs)); } else { coverage.setGrid(new GridGeometry2D(range, gridEnvelope)); coverage.setGrid(new GridGeometry2D(range, gridEnvelope));
GridGeometry2D gg = new GridGeometry2D(gridRange, gridToCRS, crs); return serializationMethodInvoker.callReadResolve(gg);
new GridGeometry2D( targetRange, gg.getGridToCRS(), gg.getCoordinateReferenceSystem2D());
(int) range.getHeight() + HETEROGENEOUS_RASTER_GUTTER * 2); GridGeometry2D expandedGG = new GridGeometry2D( expandedRange, requestedGridGeometry.getGridToCRS(),
new GridGeometry2D(testRange, testEnvelope));
new GridGeometry2D( originalRange, reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER),
/** * Returns the given grid geometry as a {@code GridGeometry2D}. If the given object is already * an instance of {@code GridGeometry2D}, then it is returned unchanged. Otherwise a new {@code * GridGeometry2D} instance is created using the {@linkplain #GridGeometry2D(GridGeometry) copy * constructor}. * * @param other The grid geometry to wrap. * @return The wrapped geometry, or {@code null} if {@code other} was null. * @since 2.5 */ public static GridGeometry2D wrap(final GridGeometry other) { if (other == null || other instanceof GridGeometry2D) { return (GridGeometry2D) other; } return new GridGeometry2D(other); }
new GridGeometry2D(reader.getOriginalGridRange(), subEnvelope)); GridCoverage2D gc = (GridCoverage2D)
GridEnvelope originalRange = reader.getOriginalGridRange(); cinfo.setGrid( new GridGeometry2D( originalRange, reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER),
AbstractGridFormat.READ_GRIDGEOMETRY2D.createValue(); gg.setValue( new GridGeometry2D( new GridEnvelope2D(0, 0, 10, 10), new ReferencedEnvelope(0, 1000, 0, 1000, UTM32N)));
private boolean renewCachedCoverage(DirectPosition centrePos) { final Rectangle queryRect = createQueryGridEnvelope(centrePos); if (queryRect.isEmpty()) { return false; } final GridCoverage2DReader reader = sourceRef.get(); GeneralParameterValue parameter = new Parameter( AbstractGridFormat.READ_GRIDGEOMETRY2D, new GridGeometry2D( new GridEnvelope2D(queryRect), reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER), reader.getCoordinateReferenceSystem())); try { cachedCoverage = (GridCoverage2D) reader.read(new GeneralParameterValue[] {parameter}); return cachedCoverage != null; } catch (Exception ex) { throw new RuntimeException(ex); } }
private GridGeometry2D applyReadGutter(GridGeometry2D gg) { MathTransform gridToCRS = gg.getGridToCRS(); GridEnvelope2D range = new GridEnvelope2D(gg.getGridRange2D()); applyReadGutter(range); CoordinateReferenceSystem crs = gg.getEnvelope2D().getCoordinateReferenceSystem(); GridGeometry2D result = new GridGeometry2D(range, PixelInCell.CELL_CORNER, gridToCRS, crs, null); return result; }
/** * This method is used for setting the final image layout. * * @param parameters * @param layout * @param bbox */ private void updateLayout( final BandMergeParams parameters, ImageLayout layout, Envelope2D bbox) { // Creation of a GridGeoemtry with the selected BBOX and the defined World2Grid // transformation GridGeometry2D gg2D = new GridGeometry2D(PixelInCell.CELL_CORNER, parameters.gridToCRS, bbox, null); // Selection of the GridEnvelope from the GridGeometry for using it as the new Layout GridEnvelope2D gridRange2D = gg2D.getGridRange2D(); layout.setMinX(gridRange2D.x); layout.setMinY(gridRange2D.y); layout.setWidth(gridRange2D.width); layout.setHeight(gridRange2D.height); }
/** * Returns a "canonical" representation of the grid geometry, that is, one whose grid range * originates in 0,0, but maps to the same real world coordinates. This setup helps in image * processing, as JAI is not meant to be used for images whose ordinates are in the range of the * millions and starts to exhibit numerical issues when used there. * * @return * @since 13.3 */ public GridGeometry2D toCanonical() { // see where we are int lowX = gridRange.getLow(0); int lowY = gridRange.getLow(1); if (lowX == 0 && lowY == 0) { // already canonical return this; } GridEnvelope2D canonicalRange = new GridEnvelope2D(0, 0, gridRange.getSpan(0), gridRange.getSpan(1)); AffineTransform2D translation = new AffineTransform2D(1, 0, 0, 1, lowX, lowY); MathTransform canonicalTransform = ConcatenatedTransform.create(translation, gridToCRS2D); return new GridGeometry2D( canonicalRange, canonicalTransform, getCoordinateReferenceSystem()); } }
@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()); }
static GridCoverage2D displace( GridCoverage2D coverage, double tx, double ty, GridCoverageFactory gridCoverageFactory) { // let's compute the new grid geometry GridGeometry2D originalGG = coverage.getGridGeometry(); GridEnvelope gridRange = originalGG.getGridRange(); Envelope2D envelope = originalGG.getEnvelope2D(); double minx = envelope.getMinX() + tx; double miny = envelope.getMinY() + ty; double maxx = envelope.getMaxX() + tx; double maxy = envelope.getMaxY() + ty; ReferencedEnvelope translatedEnvelope = new ReferencedEnvelope( minx, maxx, miny, maxy, envelope.getCoordinateReferenceSystem()); GridGeometry2D translatedGG = new GridGeometry2D(gridRange, translatedEnvelope); GridCoverage2D translatedCoverage = gridCoverageFactory.create( coverage.getName(), coverage.getRenderedImage(), translatedGG, coverage.getSampleDimensions(), new GridCoverage2D[] {coverage}, coverage.getProperties()); return translatedCoverage; }
@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); }
@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()); } }