private GeoTiffWriteParams buildWriteParams(GridCoverage2D coverage) { final RenderedImage renderedImage = coverage.getRenderedImage(); int tileWidth = renderedImage.getTileWidth(); int tileHeight = renderedImage.getTileHeight(); // avoid tiles bigger than the image final GridEnvelope gr = coverage.getGridGeometry().getGridRange(); if (gr.getSpan(0) < tileWidth) { tileWidth = gr.getSpan(0); } if (gr.getSpan(1) < tileHeight) { tileHeight = gr.getSpan(1); } GeoTiffWriteParams writeParams = new GeoTiffWriteParams(); writeParams.setTilingMode(GeoToolsWriteParams.MODE_EXPLICIT); writeParams.setTiling(tileWidth, tileHeight); return writeParams; }
this.gridRange.getLow(0), this.gridRange.getLow(1), this.gridRange.getSpan(0), this.gridRange.getSpan(1)); final Rectangle thatRectangle = new Rectangle( gridRange.getLow(0), gridRange.getLow(1), gridRange.getSpan(0), gridRange.getSpan(1)); if (!thisRectangle.equals(thatRectangle)) { if (!canSupportHeterogeneousCoverages) {
/** @see org.geotools.arcsde.raster.io.TileReader#getTilesWide() */ public int getTilesWide() { return requestedTiles.getSpan(0); }
/** @see org.geotools.arcsde.raster.io.TileReader#getTilesHigh() */ public int getTilesHigh() { return requestedTiles.getSpan(1); }
public int getImageHeight() { final GridEnvelope originalGridRange = getOriginalGridRange(); final int height = originalGridRange.getSpan(1); return height; }
public int getImageWidth() { final GridEnvelope originalGridRange = getOriginalGridRange(); final int width = originalGridRange.getSpan(0); return width; }
private static GridEnvelope getTiledImageGridRange( Dimension tileSize, GridEnvelope matchingTiles) { int tiledImageMinX = (matchingTiles.getLow(0) * tileSize.width); int tiledImageMinY = (matchingTiles.getLow(1) * tileSize.height); int tiledWidth = (matchingTiles.getSpan(0) * tileSize.width); int tiledHeight = (matchingTiles.getSpan(1) * tileSize.height); GridEnvelope2D tiledImageGridRange; tiledImageGridRange = new GridEnvelope2D(tiledImageMinX, tiledImageMinY, tiledWidth, tiledHeight); return tiledImageGridRange; }
PyramidLevelInfo( final int level, final int numTilesWide, final int numTilesHigh, final GridEnvelope gridEnvelope, final GeneralEnvelope spatialExtent) { this.pyramidLevel = level; this.spatialExtent = spatialExtent; this.gridEnvelope = new GridEnvelope2D( gridEnvelope.getLow(0), gridEnvelope.getLow(1), gridEnvelope.getSpan(0), gridEnvelope.getSpan(1)); this.xTiles = numTilesWide; this.yTiles = numTilesHigh; }
public int getOptimalPyramidLevel( final int rasterIndex, final OverviewPolicy policy, final GeneralEnvelope requestedEnvelope, final GridEnvelope requestedDim) { final RasterInfo rasterInfo = getRasterInfo(rasterIndex); double[] requestedRes = new double[2]; double reqSpanX = requestedEnvelope.getSpan(0); double reqSpanY = requestedEnvelope.getSpan(1); requestedRes[0] = reqSpanX / (double) requestedDim.getSpan(0); requestedRes[1] = reqSpanY / (double) requestedDim.getSpan(1); return rasterInfo.getOptimalPyramidLevel(policy, requestedRes); }
/** * Retrieves the {@link GeneralGridEnvelope} that represents the raster grid dimensions of the * highest resolution level in this dataset. * * @return the {@link GeneralGridEnvelope} that represents the raster grid dimensions of the * highest resolution level in this dataset. */ @Override public GridEnvelope getOriginalGridRange(String coverageName) { if (!checkName(coverageName)) { throw new IllegalArgumentException( "The specified coverageName " + coverageName + "is not supported"); } assert originalGridRange.getDimension() == 2; return new GridEnvelope2D( originalGridRange.getLow(0), originalGridRange.getLow(1), originalGridRange.getSpan(0), originalGridRange.getSpan(1)); }
private Rectangle createQueryGridEnvelope(DirectPosition pos) { final GridCoverage2DReader reader = sourceRef.get(); try { MathTransform worldToGridTransform = reader.getOriginalGridToWorld(PixelInCell.CELL_CORNER).inverse(); DirectPosition midPos = worldToGridTransform.transform(pos, null); int x = (int) midPos.getOrdinate(0); int y = (int) midPos.getOrdinate(1); int halfWidth = CACHED_RASTER_WIDTH / 2; final Rectangle queryRect = new Rectangle( x - halfWidth, y - halfWidth, CACHED_RASTER_WIDTH, CACHED_RASTER_WIDTH); GridEnvelope gridEnv = reader.getOriginalGridRange(); Rectangle rect = new Rectangle( gridEnv.getLow(0), gridEnv.getLow(1), gridEnv.getSpan(0), gridEnv.getSpan(1)); XRectangle2D.intersect(queryRect, rect, queryRect); return queryRect; } catch (Exception ex) { throw new RuntimeException(ex); } } }
/** * Returns the two-dimensional part of the {@linkplain #getGridRange grid range} as a rectangle. * Note that the returned object is a {@link Rectangle} subclass. * * @return The grid range (never {@code null}). * @throws InvalidGridGeometryException if this grid geometry has no grid range (i.e. <code> * {@linkplain #isDefined isDefined}({@linkplain #GRID_RANGE_BITMASK GRID_RANGE_BITMASK}) * </code> returned {@code false}). * @see #getGridRange */ public GridEnvelope2D getGridRange2D() throws InvalidGridGeometryException { if (gridRange != null) { assert isDefined(GRID_RANGE_BITMASK); return new GridEnvelope2D( gridRange.getLow(gridDimensionX), gridRange.getLow(gridDimensionY), gridRange.getSpan(gridDimensionX), gridRange.getSpan(gridDimensionY)); } assert !isDefined(GRID_RANGE_BITMASK); throw new InvalidGridGeometryException(ErrorKeys.UNSPECIFIED_IMAGE_SIZE); }
label = Integer.valueOf(i); if (range.getLow(i) != min || range.getSpan(i) != length) { return Errors.format(ErrorKeys.BAD_GRID_RANGE_$3, label, min, min + length);
/** * 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()); } }