Package org.geotools.coverage.grid

Examples of org.geotools.coverage.grid.GridGeometry2D


            oldEnvelope.getUpperCorner().getOrdinate(1) });
    cropEnvelope.setCoordinateReferenceSystem(reader.getCrs());

    final ParameterValue gg = (ParameterValue) ((AbstractGridFormat) reader
        .getFormat()).READ_GRIDGEOMETRY2D.createValue();
    gg.setValue(new GridGeometry2D(new GridEnvelope2D(new Rectangle(0, 0,
        (int) (range.width / 2.0 / cropFactor),
        (int) (range.height / 2.0 / cropFactor))), cropEnvelope));
    gc = (GridCoverage2D) reader.read(new GeneralParameterValue[] { gg });
    forceDataLoading(gc);
  }
View Full Code Here


    public GridCoverageReaderHelper(GridCoverage2DReader reader, Rectangle mapRasterArea,
            ReferencedEnvelope mapExtent, Interpolation interpolation) throws FactoryException, IOException {
        this.reader = reader;
        this.mapExtent = mapExtent;
        this.requestedGridGeometry = new GridGeometry2D(new GridEnvelope2D(mapRasterArea),
                mapExtent);
        this.worldToScreen = requestedGridGeometry.getCRSToGrid2D();

        // determine if we need a reading gutter, or not, we do if we are reprojecting, or if
        // there is an interpolation to be applied, in that case we need to expand the area
        // we are going to read
        sameCRS = CRS.equalsIgnoreMetadata(mapExtent.getCoordinateReferenceSystem(),
                reader.getCoordinateReferenceSystem());
        paddingRequired = (!sameCRS || !(interpolation instanceof InterpolationNearest)) && !isReprojectingReader(reader);
        if (paddingRequired) {
            // expand the map raster area
            GridEnvelope2D requestedGridEnvelope = new GridEnvelope2D(mapRasterArea);
            applyReadGutter(requestedGridEnvelope);

            // now create the final envelope accordingly
            try {
                this.requestedGridGeometry = new GridGeometry2D(requestedGridEnvelope,
                        PixelInCell.CELL_CORNER, worldToScreen.inverse(),
                        mapExtent.getCoordinateReferenceSystem(), null);
                this.mapExtent = ReferencedEnvelope
                        .reference(requestedGridGeometry.getEnvelope2D());
                this.mapRasterArea = requestedGridGeometry.getGridRange2D().getBounds();
View Full Code Here

    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;

    }
View Full Code Here

        if (handler == null) {
            GridCoverage2D readCoverage = readCoverage(readParams);
            return Arrays.asList(readCoverage);
        }

        GridGeometry2D gg = new GridGeometry2D(new GridEnvelope2D(mapRasterArea), mapExtent);

        CoordinateReferenceSystem readerCRS = reader.getCoordinateReferenceSystem();

        // get the areas that we are likely to have to read, and have the projection
        // handler also cut them
        List<GridCoverage2D> coverages = new ArrayList<GridCoverage2D>();
        PolygonExtractor polygonExtractor = new PolygonExtractor();
        for (ReferencedEnvelope envelope : handler.getQueryEnvelopes()) {
            Polygon polygon = JTS.toGeometry(envelope);

            GridGeometry2D readingGridGeometry = computeReadingGeometry(gg, readerCRS, polygon, handler);
            if (readingGridGeometry == null) {
                continue;
            }
            if (paddingRequired) {
                readingGridGeometry = applyReadGutter(readingGridGeometry);
            }
            GridCoverage2D coverage = readSingleCoverage(readParams, readingGridGeometry);
            if (coverage == null) {
                continue;
            }

            // cut and slice the geometry as required by the projection handler
            ReferencedEnvelope readingEnvelope = ReferencedEnvelope.reference(readingGridGeometry
                    .getEnvelope2D());
            ReferencedEnvelope coverageEnvelope = ReferencedEnvelope.reference(coverage
                    .getEnvelope2D());
            Polygon coverageFootprint = JTS.toGeometry(coverageEnvelope);
            Geometry preProcessed = handler.preProcess(coverageFootprint);
View Full Code Here

    private GridGeometry2D computeReadingGeometry(GridGeometry2D gg,
            CoordinateReferenceSystem readerCRS, Polygon polygon, ProjectionHandler handler)
            throws TransformException,
            FactoryException, IOException {
        GridGeometry2D readingGridGeometry;
        MathTransform2D crsToGrid2D = gg.getCRSToGrid2D();
        MathTransform2D gridToCRS2D = gg.getGridToCRS2D();
        if (sameCRS) {
            Envelope gridEnvelope = JTS.transform(polygon, crsToGrid2D).getEnvelopeInternal();
            GridEnvelope2D gridRange = new GridEnvelope2D((int) gridEnvelope.getMinX(),
                    (int) gridEnvelope.getMinY(), (int) Math.round(gridEnvelope.getWidth()),
                    (int) Math.round(gridEnvelope.getHeight()));
            readingGridGeometry = new GridGeometry2D(gridRange, gridToCRS2D, readerCRS);
        } else {
            ReferencedEnvelope readEnvelope = new ReferencedEnvelope(polygon.getEnvelopeInternal(),
                    readerCRS);
            // while we want to read as much data as possible, and cut it only later
            // to avoid warping edge effects later, the resolution needs to be
            // computed against an area that's sane for the projection at hand
            ReferencedEnvelope reducedEnvelope = reduceEnvelope(readEnvelope, handler);
            if (reducedEnvelope == null) {
                return null;
            }
            ReferencedEnvelope reducedEnvelopeInRequestedCRS = reducedEnvelope.transform(
                    requestedGridGeometry.getCoordinateReferenceSystem(), true);
            ReferencedEnvelope gridEnvelope = ReferencedEnvelope.reference(CRS.transform(
                    crsToGrid2D, reducedEnvelopeInRequestedCRS));
            GridEnvelope2D readingGridRange = new GridEnvelope2D((int) gridEnvelope.getMinX(),
                    (int) gridEnvelope.getMinY(), (int) gridEnvelope.getWidth(),
                    (int) gridEnvelope.getHeight());
            GridGeometry2D localGridGeometry = new GridGeometry2D(readingGridRange, gridToCRS2D,
                    mapExtent.getCoordinateReferenceSystem());

            double[][] resolutionLevels = reader.getResolutionLevels();
            ReadResolutionCalculator calculator = new ReadResolutionCalculator(localGridGeometry,
                    readerCRS, resolutionLevels != null ? resolutionLevels[0] : null);
            calculator.setAccurateResolution(true);
            double[] readResolution = calculator.computeRequestedResolution(reducedEnvelope);
            int width = (int) Math.max(1,
                    Math.round(readEnvelope.getWidth() / Math.abs(readResolution[0])));
            int height = (int) Math.max(1,
                    Math.round(readEnvelope.getHeight() / Math.abs(readResolution[1])));
            GridEnvelope2D gridRange = new GridEnvelope2D(0, 0, width, height);
            readingGridGeometry = new GridGeometry2D(gridRange, readEnvelope);
        }
        return readingGridGeometry;
    }
View Full Code Here

        }

        // setup the grid geometry param that will be passed to the reader
        final Parameter<GridGeometry2D> readGGParam = (Parameter<GridGeometry2D>) AbstractGridFormat.READ_GRIDGEOMETRY2D
                .createValue();
        readGGParam.setValue(new GridGeometry2D(gg));

        // then I try to get read parameters associated with this
        // coverage if there are any.
        GridCoverage2D coverage = null;
        if (readParams != null) {
View Full Code Here

            GridCoverage2D coverage = null;
            if(FeatureUtilities.isWrappedCoverage(simpleSchema) || FeatureUtilities.isWrappedCoverageReader(simpleSchema)) {
                isRasterData = true;

                // get the desired grid geometry
                GridGeometry2D readGG = gridGeometry;
                if(transformation instanceof RenderingTransformation) {
                    RenderingTransformation tx = (RenderingTransformation) transformation;
                    readGG = (GridGeometry2D) tx.invertGridGeometry(renderingQuery, gridGeometry);
                    // TODO: override the read params and force this grid geometry, or something
                    // similar to this (like passing it as a param to readCoverage
                }
               
                FeatureCollection<?,?> sample = featureSource.getFeatures();
                Feature gridWrapper = DataUtilities.first( sample );
               
                if(FeatureUtilities.isWrappedCoverageReader(simpleSchema)) {
                    final Object params = PARAMS_PROPERTY_NAME.evaluate(gridWrapper);
                    final GridCoverage2DReader reader = (GridCoverage2DReader) GRID_PROPERTY_NAME.evaluate(gridWrapper);
                    // don't read more than the native resolution (in case we are oversampling)
                    if(CRS.equalsIgnoreMetadata(reader.getCoordinateReferenceSystem(), gridGeometry.getCoordinateReferenceSystem())) {
                         MathTransform g2w = reader.getOriginalGridToWorld(PixelInCell.CELL_CENTER);
                         if(g2w instanceof AffineTransform2D && readGG.getGridToCRS2D() instanceof AffineTransform2D) {
                             AffineTransform2D atOriginal = (AffineTransform2D) g2w;
                             AffineTransform2D atMap = (AffineTransform2D) readGG.getGridToCRS2D();
                             if(XAffineTransform.getScale(atMap) < XAffineTransform.getScale(atOriginal)) {
                                 // we need to go trough some convoluted code to make sure the new grid geometry
                                 // has at least one pixel
                                
                                 org.opengis.geometry.Envelope worldEnvelope = gridGeometry.getEnvelope();
                                 GeneralEnvelope transformed = org.geotools.referencing.CRS.transform(atOriginal.inverse(), worldEnvelope);
                                 int minx = (int) Math.floor(transformed.getMinimum(0));
                                 int miny = (int) Math.floor(transformed.getMinimum(1));
                                 int maxx = (int) Math.ceil(transformed.getMaximum(0));
                                 int maxy = (int) Math.ceil(transformed.getMaximum(1));
                                 Rectangle rect = new Rectangle(minx, miny, (maxx - minx), (maxy - miny));
                                 GridEnvelope2D gridEnvelope = new GridEnvelope2D(rect);
                                 readGG = new GridGeometry2D(gridEnvelope, atOriginal, worldEnvelope.getCoordinateReferenceSystem());
                             }
                         }
                    }
                    coverage = readCoverage(reader, params, readGG);
                } else {
                    coverage = (GridCoverage2D) GRID_PROPERTY_NAME.evaluate(gridWrapper);
                }
               
                // readers will return null if there is no coverage in the area
                if(coverage != null) {
                    if(readGG != null) {
                        // Crop will fail if we try to crop outside of the coverage area
                        ReferencedEnvelope renderingEnvelope = new ReferencedEnvelope(readGG.getEnvelope());
                        CoordinateReferenceSystem coverageCRS = coverage.getCoordinateReferenceSystem2D();
                        if(!CRS.equalsIgnoreMetadata(renderingEnvelope.getCoordinateReferenceSystem(), coverageCRS)) {
                            renderingEnvelope = renderingEnvelope.transform(coverageCRS, true);
                        }
                        if(coverage.getEnvelope2D().intersects(renderingEnvelope)) {
                            // the resulting coverage might be larger than the readGG envelope, shall we crop it?
                            final ParameterValueGroup param = CROP.getParameters();
                            param.parameter("Source").setValue(coverage);
                            param.parameter("Envelope").setValue(renderingEnvelope);
                            coverage = (GridCoverage2D) PROCESSOR.doOperation(param);
                        } else {
                            coverage = null;
                        }
                       
                        if(coverage != null) {
                            // we might also need to scale the coverage to the desired resolution
                            MathTransform2D coverageTx = readGG.getGridToCRS2D();
                            if(coverageTx instanceof AffineTransform) {
                                AffineTransform coverageAt = (AffineTransform) coverageTx;
                                AffineTransform renderingAt = (AffineTransform) gridGeometry.getGridToCRS2D();
                                // we adjust the scale only if we have many more pixels than required (30% or more)
                                final double ratioX = coverageAt.getScaleX() / renderingAt.getScaleX();
View Full Code Here

        dim.setSize(reader.getOriginalGridRange().getSpan(0) / 2.0, reader.getOriginalGridRange()
                .getSpan(1) / 2.0);
        Rectangle rasterArea = ((GridEnvelope2D) reader.getOriginalGridRange());
        rasterArea.setSize(dim);
        GridEnvelope2D range = new GridEnvelope2D(rasterArea);
        gg.setValue(new GridGeometry2D(range, envelope));

        GridCoverage2D coverage = reader.read(new GeneralParameterValue[] { gg });
        RenderedImage image = coverage.getRenderedImage();
        assertEquals(image.getWidth(), 180);
        assertEquals(image.getHeight(), 90);
       
        dim.setSize(reader.getOriginalGridRange().getSpan(0) / 4.0, reader.getOriginalGridRange()
                .getSpan(1) / 4.0);
        rasterArea = ((GridEnvelope2D) reader.getOriginalGridRange());
        rasterArea.setSize(dim);
        range = new GridEnvelope2D(rasterArea);
        gg.setValue(new GridGeometry2D(range, envelope));

        coverage = reader.read(new GeneralParameterValue[] { gg });
        image = coverage.getRenderedImage();
        assertEquals(image.getWidth(), 90);
        assertEquals(image.getHeight(), 45);
View Full Code Here

    {
        if (coverage instanceof GridCoverage2D) {
            return ((GridCoverage2D) coverage).getCoordinateReferenceSystem2D();
        }
        if (coverage instanceof GridCoverage) {
            final GridGeometry2D geometry =
                    GridGeometry2D.wrap(((GridCoverage) coverage).getGridGeometry());
            if (geometry.isDefined(GridGeometry2D.CRS_BITMASK)) {
                return geometry.getCoordinateReferenceSystem2D();
            } else try {
                return geometry.reduce(coverage.getCoordinateReferenceSystem());
            } catch (FactoryException exception) {
                // Ignore; we will fallback on the code below.
            }
        }
        return CRSUtilities.getCRS2D(coverage.getCoordinateReferenceSystem());
View Full Code Here

      CoordinateReferenceSystem returnedCRS=null;
        if (coverage instanceof GridCoverage2D) {
          returnedCRS= ((GridCoverage2D) coverage).getCoordinateReferenceSystem2D();
        }
        if (coverage instanceof GridCoverage) {
            final GridGeometry2D geometry =
                    GridGeometry2D.wrap(((GridCoverage) coverage).getGridGeometry());
            if (geometry.isDefined(GridGeometry2D.CRS_BITMASK)) {
              returnedCRS= geometry.getCoordinateReferenceSystem2D();
            } else try {
              returnedCRS= geometry.reduce(coverage.getCoordinateReferenceSystem());
            } catch (FactoryException exception) {
                // Ignore; we will fallback on the code below.
            }
        }
        if(returnedCRS==null)
View Full Code Here

TOP

Related Classes of org.geotools.coverage.grid.GridGeometry2D

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.