public CoveragesConsistencyChecker( GridCoverage2DReader reader, boolean canSupportHeterogeneousCoverages) throws IOException { envelope = reader.getOriginalEnvelope(); gridRange = reader.getOriginalGridRange(); crs = reader.getCoordinateReferenceSystem(); metadataNames = reader.getMetadataNames(); dynamicParameters = reader.getDynamicParameters(); layout = reader.getImageLayout(); this.canSupportHeterogeneousCoverages = canSupportHeterogeneousCoverages; }
public GridCoverage2D read(GeneralParameterValue[] parameters) throws IllegalArgumentException, IOException { return delegate.read(parameters); }
public void dispose() throws IOException { delegate.dispose(); }
@Override public void visit(GridCoverage2DReader reader) throws IOException { if (resolution == null) { resolution = reader.getResolutionLevels(); referenceName = reader.getGridCoverageNames()[0]; } else { double[][] tempRes = reader.getResolutionLevels(); if (tempRes[0][0] < resolution[0][0] && tempRes[0][1] < resolution[0][1]) { resolution = tempRes; referenceName = reader.getGridCoverageNames()[0]; } } }
final GeneralEnvelope originalEnvelope = reader.getOriginalEnvelope(); final BoundingBoxType bbox = request.getDomainSubset().getBoundingBox(); final CoordinateReferenceSystem nativeCRS = originalEnvelope.getCoordinateReferenceSystem(); final GeneralEnvelope requestedEnvelopeInNativeCRS; final GeneralEnvelope requestedEnvelope; upperCorner[i] = (Double) bbox.getUpperCorner().get(i); requestedEnvelope = new GeneralEnvelope(lowerCorner, upperCorner); requestedEnvelopeInNativeCRS = reader.getOriginalEnvelope(); requestedEnvelope = requestedEnvelopeInNativeCRS; targetCRS = reader.getOriginalEnvelope().getCoordinateReferenceSystem(); MathTransform gridToCRS = reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER); reader.getFormat().getReadParameters(); GeneralParameterValue[] readParameters = CoverageUtils.getParameters(readParametersDescriptor, meta.getParameters()); coverage = (GridCoverage2D) reader.read(readParameters); if ((coverage == null) || !(coverage instanceof GridCoverage2D)) { throw new IOException("The requested coverage could not be found."); if (!intersectionEnvelopeInSourceCRS.contains(coverage.getEnvelope2D(), true)) { coverage = WCSUtils.crop(coverage, intersectionEnvelopeInSourceCRS);
@Test public void testNullSymbolizer() throws Exception { CoordinateReferenceSystem googleMercator = CRS.decode("EPSG:3857"); ReferencedEnvelope mapExtent = new ReferencedEnvelope( -20037508.34, 20037508.34, -20037508.34, 20037508.34, googleMercator); Rectangle screenSize = new Rectangle(200, (int) (mapExtent.getHeight() / mapExtent.getWidth() * 200)); AffineTransform w2s = RendererUtilities.worldToScreenTransform(mapExtent, screenSize); GridCoverageRenderer renderer = new GridCoverageRenderer(googleMercator, mapExtent, screenSize, w2s); GridCoverage2D coverage = worldReader.read(null); RenderedImage image = renderer.renderImage( coverage, null, Interpolation.getInstance(Interpolation.INTERP_BICUBIC), Color.RED, 256, 256); File reference = new File( "src/test/resources/org/geotools/renderer/lite/gridcoverage2d/googleMercatorBicubic.png"); ImageAssert.assertEquals(reference, image, 0); }
(GridCoverage2DReader) GRID_PROPERTY_NAME.evaluate(gridWrapper); if (CRS.equalsIgnoreMetadata( reader.getCoordinateReferenceSystem(), gridGeometry.getCoordinateReferenceSystem())) { MathTransform g2w = reader.getOriginalGridToWorld(PixelInCell.CELL_CORNER); if (g2w instanceof AffineTransform2D && readGG.getGridToCRS2D() instanceof AffineTransform2D) { AffineTransform2D atOriginal = (AffineTransform2D) g2w; AffineTransform2D atMap = (AffineTransform2D) readGG.getGridToCRS2D(); if (XAffineTransform.getScale(atMap) < XAffineTransform.getScale(atOriginal)) { new ReferencedEnvelope(readGG.getEnvelope()); CoordinateReferenceSystem coverageCRS = coverage.getCoordinateReferenceSystem2D(); if (!CRS.equalsIgnoreMetadata( renderingEnvelope.getCoordinateReferenceSystem(), coverageCRS)) { renderingEnvelope = renderingEnvelope.transform(coverageCRS, true); if (coverage.getEnvelope2D().intersects(renderingEnvelope)) {
"test", new float[200][100], new ReferencedEnvelope( -180, 180, -90, 90, DefaultGeographicCRS.WGS84)); GridCoverage2DReader reader = new GeneralEnvelope((BoundingBox) coverage.getEnvelope2D()); this.originalGridRange = coverage.getGridGeometry().getGridRange(); CoordinateReferenceSystem crs = CRS.decode("EPSG:3031", true); ReferencedEnvelope mapExtent = new ReferencedEnvelope(-20000000, 20000000, -20000000, 20000000, crs); mapExtent, reader.getCoordinateReferenceSystem(), true); List<GridCoverage2D> coverages = helper.readCoverages(null, handler); assertEquals(1, coverages.size());
throws FactoryException, IOException, TransformException { CoordinateReferenceSystem sourceCRS = reader.getCoordinateReferenceSystem(); CoordinateReferenceSystem targetCRS = destinationEnvelope.getCoordinateReferenceSystem(); continue; ColorModel cm = coverages.get(0).getRenderedImage().getColorModel(); if (cm instanceof IndexColorModel && background != null) { IndexColorModel icm = (IndexColorModel) cm; ImageWorker iw = new ImageWorker(coverage.getRenderedImage()); iw.forceComponentColorModel(); GridCoverage2D expandedCoverage = if (!reduced.equals(gg)) { GeneralEnvelope cutEnvelope = reducer.getCutEnvelope(reduced); GridCoverage2D croppedCoverage = crop(coverage, cutEnvelope, false, bgValues); if (!CRS.equalsIgnoreMetadata(coverageCRS, destinationCRS)) { GridCoverage2D reprojected = reproject(coverage, true, bgValues); if (reprojected != null) { ReferencedEnvelope re = ReferencedEnvelope.reference(coverage.getEnvelope2D()); if (!destinationEnvelope.intersects(re, false)) { it.remove();
@Test public void testReprojectTransparency() throws Exception { ReferencedEnvelope re = new ReferencedEnvelope(0, 20, 20, 40, DefaultGeographicCRS.WGS84); CoordinateReferenceSystem utm32n = CRS.decode("EPSG:32632", true); ReferencedEnvelope mapExtent = re.transform(utm32n, true); // get a subset of the coverage GridCoverage2D global = worldReader.read(null); CoverageProcessor processor = CoverageProcessor.getInstance(new Hints(Hints.LENIENT_DATUM_SHIFT, Boolean.TRUE)); final ParameterValueGroup param = processor.getOperation("CoverageCrop").getParameters().clone(); param.parameter("source").setValue(global); param.parameter("Envelope").setValue(re); GridCoverage2D cropped = (GridCoverage2D) ((Crop) processor.getOperation("CoverageCrop")).doOperation(param, null); // render with reprojection, the ROI should be used to create transparent pixels BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_4BYTE_ABGR); Graphics2D graphics = bi.createGraphics(); GridCoverageRenderer renderer = new GridCoverageRenderer(utm32n, mapExtent, new Rectangle(0, 0, 100, 100), null); renderer.paint(graphics, cropped, new StyleBuilder().createRasterSymbolizer()); graphics.dispose(); // top left and top right corners must be transparent now, the UTM shrinks towards the pole assertPixelIsTransparent(bi, 0, 0); assertPixelIsTransparent(bi, bi.getWidth() - 1, 0); }
GridEnvelope2D range = requestedGridGeometry.getGridRange2D(); GridEnvelope2D expandedRange = new GridEnvelope2D( (int) range.getHeight() + HETEROGENEOUS_RASTER_GUTTER * 2); GridGeometry2D expandedGG = new GridGeometry2D( .toArray(GeneralParameterValue[]::new); GridCoverage2D coverage = reader.read(filteredParameters); if (coverage == null) { if (handler.isHomogeneousCoverages() GridCoverage2D reference = inputCoverages.values().stream().filter(c -> c != null).findFirst().get(); RenderedImage ri = reference.getRenderedImage(); width = ri.getWidth(); height = ri.getHeight(); ImageLayout layout = reader.getImageLayout(); int numBands = layout.getSampleModel(null).getNumBands(); Number[] bandValues = new Number[numBands]; // all zeroes + coverageName + ", result has envelope " + coverage.getEnvelope2D());
if (bounds != null && bounds.getCoordinateReferenceSystem() == null && crs != null) { bounds = new ReferencedEnvelope(bounds, crs); if (bounds.getCoordinateReferenceSystem() instanceof GeographicCRS) { expandBy = 0.0001; bounds = new ReferencedEnvelope(reader.getOriginalEnvelope());
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem(); GeneralEnvelope envelope = reader.getOriginalEnvelope(); GeneralEnvelope wgs84envelope = CoverageStoreUtils.getWGS84LonLatEnvelope(envelope); final String nativeCrsName = CRS.lookupIdentifier(crs, false); writer.write( "<envelope crs=\"" final ParameterValueGroup readParams = reader.getFormat().getReadParameters(); subEnvelope.setCoordinateReferenceSystem(reader.getCoordinateReferenceSystem()); new GridGeometry2D(reader.getOriginalGridRange(), subEnvelope)); GridCoverage2D gc = (GridCoverage2D) reader.read(CoverageUtils.getParameters(readParams, parameters, true)); final GridGeometry geometry = gc.getGridGeometry(); final int dimensions = geometry.getGridRange().getDimension(); String lower = ""; final GridSampleDimension[] sd = gc.getSampleDimensions(); for (int i = 0; i < sd.length; i++) { writer.write("<CoverageDimension>\n");
cinfo.setNativeCRS(reader.getCoordinateReferenceSystem()); Integer code = CRS.lookupEpsgCode(nativeCRS, false); if (code != null) { cinfo.setSRS("EPSG:" + code); GeneralEnvelope envelope = reader.getOriginalEnvelope(); cinfo.setNativeBoundingBox(new ReferencedEnvelope(envelope)); cinfo.setLatLonBoundingBox( new ReferencedEnvelope(CoverageStoreUtils.getWGS84LonLatEnvelope(envelope))); } else if (cinfo.getLatLonBoundingBox() == null) { setupBounds(cinfo); } else if (cinfo.getNativeBoundingBox() == null && cinfo.getNativeCRS() != null) { ReferencedEnvelope boundsLatLon = cinfo.getLatLonBoundingBox(); cinfo.setNativeBoundingBox(boundsLatLon.transform(cinfo.getNativeCRS(), true)); GridEnvelope originalRange = reader.getOriginalGridRange(); cinfo.setGrid( new GridGeometry2D( originalRange, reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER), nativeCRS));
private GridSampleDimension[] getCoverageSampleDimensions( GridCoverage2DReader reader, Map customParameters) throws TransformException, IOException, Exception { GridEnvelope originalRange = reader.getOriginalGridRange(); Format format = reader.getFormat(); final ParameterValueGroup readParams = format.getReadParameters(); final Map parameters = CoverageUtils.getParametersKVP(readParams); reader.getOriginalGridToWorld(PixelInCell.CELL_CORNER); CRS.transform(gridToWorldCorner, new GeneralEnvelope(testRange.getBounds())); testEnvelope.setCoordinateReferenceSystem(reader.getCoordinateReferenceSystem()); new GridGeometry2D(testRange, testEnvelope)); reader.read(CoverageUtils.getParameters(readParams, parameters, true)); final GridSampleDimension[] sampleDimensions; if (gc != null) { sampleDimensions = gc.getSampleDimensions(); gc.dispose(true); if (gc.getRenderedImage() instanceof PlanarImage) { ImageUtilities.disposePlanarImageChain((PlanarImage) gc.getRenderedImage()); final ImageLayout imageLayout = reader.getImageLayout(); if (imageLayout == null) { throw new Exception(
GeneralEnvelope envelope = reader.getOriginalEnvelope(); CoordinateReferenceSystem nativeCRS = envelope.getCoordinateReferenceSystem(); cinfo.setNativeCRS(nativeCRS); Integer code = CRS.lookupEpsgCode(nativeCRS, false); if (code != null) { cinfo.setSRS("EPSG:" + code); cinfo.setNativeBoundingBox(new ReferencedEnvelope(envelope)); cinfo.setLatLonBoundingBox( new ReferencedEnvelope(CoverageStoreUtils.getWGS84LonLatEnvelope(envelope))); GridEnvelope originalRange = reader.getOriginalGridRange(); cinfo.setGrid( new GridGeometry2D( originalRange, reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER), nativeCRS)); cinfo.getKeywords().add(new Keyword(specifiedName)); } else { String name = reader.getGridCoverageNames()[0]; cinfo.setName(name); cinfo.setTitle(name);
try { GeneralEnvelope requestedEnvelope = new GeneralEnvelope(gridGeometry.getEnvelope()); final CoordinateReferenceSystem requestCRS = requestedEnvelope.getCoordinateReferenceSystem(); final CoordinateReferenceSystem nativeCRS = reader.getCoordinateReferenceSystem(); if (!CRS.equalsIgnoreMetadata(requestCRS, nativeCRS)) { requestedEnvelope = CRS.transform(requestedEnvelope, nativeCRS); requestedEnvelope.intersect(reader.getOriginalEnvelope()); if (!requestedEnvelope.isEmpty()) { MathTransform crsToGrid = meta.getGrid().getGridToCRS().inverse(); GeneralEnvelope requestedGrid = CRS.transform(crsToGrid, requestedEnvelope); double[] spans = new double[requestedGrid.getDimension()]; double[] resolutions = new double[requestedGrid.getDimension()]; double[] readResoutions = reader.getReadingResolutions(policy, resolutions); double[] baseResolutions = reader.getReadingResolutions(OverviewPolicy.IGNORE, resolutions); for (int i = 0; i < spans.length; i++) { spans[i] *= readResoutions[i] / baseResolutions[i];
throws TransformException, FactoryException, IOException { Polygon polygon = JTS.toGeometry(envelope); CoordinateReferenceSystem readerCRS = reader.getCoordinateReferenceSystem(); GridGeometry2D gg = new GridGeometry2D(new GridEnvelope2D(mapRasterArea), mapExtent); GridGeometry2D readingGridGeometry = computeReadingGeometry(gg, readerCRS, polygon, handler); ReferencedEnvelope.reference(readingGridGeometry.getEnvelope2D()); ReferencedEnvelope coverageEnvelope = ReferencedEnvelope.reference(coverage.getEnvelope2D()); Polygon coverageFootprint = JTS.toGeometry(coverageEnvelope); Geometry preProcessed = handler.preProcess(coverageFootprint); if (coverageFootprint.equals(preProcessed)) { if (!readingEnvelope.contains((Envelope) coverageEnvelope)) { ReferencedEnvelope cropEnvelope = new ReferencedEnvelope(
this.mapExtent = mapExtent; this.requestedGridGeometry = new GridGeometry2D(new GridEnvelope2D(mapRasterArea), mapExtent); this.worldToScreen = requestedGridGeometry.getCRSToGrid2D(); this.padding = DEFAULT_PADDING; if (hints != null && hints.containsKey(GridCoverageRenderer.PADDING)) { CRS.equalsIgnoreMetadata( mapExtent.getCoordinateReferenceSystem(), reader.getCoordinateReferenceSystem()); paddingRequired = (!sameCRS new GridGeometry2D( requestedGridEnvelope, PixelInCell.CELL_CORNER, worldToScreen.inverse(), mapExtent.getCoordinateReferenceSystem(), null); this.mapExtent = ReferencedEnvelope.reference(requestedGridGeometry.getEnvelope2D()); this.mapRasterArea = requestedGridGeometry.getGridRange2D().getBounds(); } catch (Exception e) {
.getCoverageByName(getLayerId(WATTEMP)) .getGridCoverageReader(null, null); GeneralEnvelope expectedEnvelope = sourceReader.getOriginalEnvelope(); assertEnvelopeEquals( expectedEnvelope, 1.0, (GeneralEnvelope) targetCoverage.getEnvelope(), 1.0); assertTrue( CRS.equalsIgnoreMetadata( targetCoverage.getCoordinateReferenceSystem(), expectedEnvelope.getCoordinateReferenceSystem())); final GridEnvelope gridRange = targetCoverage.getGridGeometry().getGridRange(); GridEnvelope expectedGridRange = sourceReader.getOriginalGridRange(); assertEquals(gridRange.getSpan(0), expectedGridRange.getSpan(0)); assertEquals(gridRange.getSpan(1), expectedGridRange.getSpan(1));