Package org.geotools.coverage.io

Source Code of org.geotools.coverage.io.SpatialRequestHelperTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2014, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.coverage.io;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.awt.Rectangle;
import java.awt.geom.AffineTransform;

import javax.media.jai.PlanarImage;
import javax.media.jai.RenderedOp;
import javax.media.jai.operator.ConstantDescriptor;

import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverage.grid.GridCoverageFactory;
import org.geotools.coverage.grid.GridEnvelope2D;
import org.geotools.coverage.grid.GridGeometry2D;
import org.geotools.coverage.io.SpatialRequestHelper.CoverageProperties;
import org.geotools.data.DataSourceException;
import org.geotools.factory.GeoTools;
import org.geotools.geometry.GeneralEnvelope;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.geotools.referencing.operation.builder.GridToEnvelopeMapper;
import org.geotools.referencing.operation.matrix.XAffineTransform;
import org.geotools.resources.coverage.CoverageUtilities;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opengis.geometry.Envelope;
import org.opengis.metadata.spatial.PixelOrientation;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
import org.opengis.referencing.operation.TransformException;

/**
*
* @author Nicola Lagomarsini Geosolutions
*
*/
public class SpatialRequestHelperTest {

    private static final double TOLERANCE = 0.01d;

    private static GridCoverage2D coverage;

    private static CoverageProperties coverageProperties;

    private static RenderedOp image;

    @BeforeClass
    public static void setup() {
        image = ConstantDescriptor.create(512f, 512f, new Byte[] { 1 }, GeoTools.getDefaultHints());
        Envelope envelope = new ReferencedEnvelope(-180, 180, -85, 85, DefaultGeographicCRS.WGS84);
        // Creation of a dummy GridCoverage 2D
        coverage = new GridCoverageFactory(GeoTools.getDefaultHints()).create("testCoverage",
                image, envelope);
        // Properties
        coverageProperties = new CoverageProperties();
        coverageProperties.setBbox(new ReferencedEnvelope(coverage.getEnvelope2D()));
        coverageProperties.setCrs2D(coverage.getCoordinateReferenceSystem2D());
        coverageProperties.setFullResolution(CoverageUtilities
                .getResolution((AffineTransform) coverage.getGridGeometry().getGridToCRS2D(
                        PixelOrientation.UPPER_LEFT)));
        coverageProperties.setRasterArea(coverage.getGridGeometry().getGridRange2D());
        coverageProperties.setGeographicBBox(new ReferencedEnvelope(coverage.getEnvelope2D()));
        coverageProperties.setGeographicCRS2D(coverage.getCoordinateReferenceSystem2D());
        coverageProperties.setGridToWorld2D(coverage.getGridGeometry().getGridToCRS2D(
                PixelOrientation.UPPER_LEFT));
    }

    @Test
    public void testHelperSimple() throws DataSourceException {
        // Initialization of the helper
        SpatialRequestHelper helper = new SpatialRequestHelper();
        // Final GridGeometry
        GridEnvelope2D gridRange = new GridEnvelope2D(0, 0, 1024, 1024);
        GridGeometry2D gridGeometry = new GridGeometry2D(gridRange, coverageProperties.getBbox());
        // Setting the requested gridGeometry to have
        helper.setRequestedGridGeometry(gridGeometry);
        helper.setCoverageProperties(coverageProperties);

        // Calculation of the final properties
        helper.prepare();

        // Calculate the expected results
        AffineTransform requestedGridToWorld = helper.getRequestedGridToWorld();
        double[] calculatedResolution = new double[] {
                XAffineTransform.getScaleX0(requestedGridToWorld),
                XAffineTransform.getScaleY0(requestedGridToWorld) };
        Rectangle calculatedRasterArea = new Rectangle(1024, 1024);

        // Ensure the same Coverage properties
        assertEquals(coverageProperties, helper.getCoverageProperties());
        // Ensure is not empty
        assertTrue(!helper.isEmpty());
        // Check resolution
        assertArrayEquals(helper.getRequestedResolution(), calculatedResolution, TOLERANCE);
        // Check the same boundingBox
        assertTrue(helper.getCropBBox().contains(
                new ReferencedEnvelope(coverageProperties.getBbox())));
        // Check the same destination Area
        assertTrue(helper.getDestinationRasterArea().contains(calculatedRasterArea));
    }

    @Test
    public void testHelperEmpty() throws DataSourceException {
        // Initialization of the helper
        SpatialRequestHelper helper = new SpatialRequestHelper();
        ReferencedEnvelope envelope = new ReferencedEnvelope(-180, 0, -90, 90,
                coverageProperties.getGeographicCRS2D());
        // Creation of a dummy GridCoverage 2D
        GridCoverage2D coverage2 = new GridCoverageFactory(GeoTools.getDefaultHints()).create(
                "testCoverage", image, envelope);
        CoverageProperties coverageProperties2 = new CoverageProperties();
        coverageProperties2.setBbox(new ReferencedEnvelope(coverage2.getEnvelope2D()));
        coverageProperties2.setCrs2D(coverage2.getCoordinateReferenceSystem2D());
        coverageProperties2.setFullResolution(CoverageUtilities
                .getResolution((AffineTransform) coverage2.getGridGeometry().getGridToCRS2D(
                        PixelOrientation.UPPER_LEFT)));
        coverageProperties2.setRasterArea(coverage2.getGridGeometry().getGridRange2D());
        coverageProperties2.setGeographicBBox(new ReferencedEnvelope(coverage2.getEnvelope2D()));
        coverageProperties2.setGeographicCRS2D(coverage2.getCoordinateReferenceSystem2D());
        coverageProperties2.setGridToWorld2D(coverage2.getGridGeometry().getGridToCRS2D(
                PixelOrientation.UPPER_LEFT));
        // Final GridGeometry
        GridEnvelope2D gridRange = new GridEnvelope2D(0, 0, 1024, 1024);
        ReferencedEnvelope envelope2 = new ReferencedEnvelope(1, 180, -90, 90,
                coverageProperties.getGeographicCRS2D());
        GridGeometry2D gridGeometry = new GridGeometry2D(gridRange, envelope2);
        // Setting the requested gridGeometry to have
        helper.setRequestedGridGeometry(gridGeometry);
        helper.setCoverageProperties(coverageProperties2);

        // Calculation of the final properties
        helper.prepare();

        // Ensure the same Coverage properties
        assertEquals(coverageProperties2, helper.getCoverageProperties());
        // Ensure is not empty
        assertTrue(helper.isEmpty());
    }

    @Test
    public void testHelperWithReprojection() throws DataSourceException,
            NoSuchAuthorityCodeException, TransformException, FactoryException {
        // Initialization of the helper
        SpatialRequestHelper helper = new SpatialRequestHelper();
        // Final GridGeometry
        GridEnvelope2D gridRange = new GridEnvelope2D(0, 0, 1024, 1024);
        GeneralEnvelope envelope = CRS.transform(coverage.getEnvelope(), CRS.decode("EPSG:3857"));
        GridGeometry2D gridGeometry = new GridGeometry2D(gridRange, envelope);
        // Setting the requested gridGeometry to have
        helper.setRequestedGridGeometry(gridGeometry);
        helper.setCoverageProperties(coverageProperties);

        // Calculation of the final properties
        helper.prepare();

        // Calculate the expected results
        final GeneralEnvelope temp = new GeneralEnvelope(CRS.transform(gridGeometry.getEnvelope(),
                coverageProperties.crs2D));
        temp.setCoordinateReferenceSystem(coverageProperties.crs2D);
        temp.intersect(coverageProperties.getBbox());
        final GridToEnvelopeMapper geMapper = new GridToEnvelopeMapper(
                new GridEnvelope2D(gridRange), temp);
        final AffineTransform tempTransform = geMapper.createAffineTransform();
        double[] calculatedResolution = new double[] { XAffineTransform.getScaleX0(tempTransform),
                XAffineTransform.getScaleY0(tempTransform) };

        // Ensure is not empty
        assertTrue(!helper.isEmpty());
        // Check resolution
        assertArrayEquals(helper.getRequestedResolution(), calculatedResolution, TOLERANCE);
        // Check the same boundingBox
        assertTrue(helper.getCropBBox().contains(new ReferencedEnvelope(temp)));
        // Check the same destination Area
        assertTrue(helper.getDestinationRasterArea().contains(gridRange));
    }

    @Test
    public void testHelperWithNoGridGeometry() throws DataSourceException,
            NoSuchAuthorityCodeException, TransformException, FactoryException {
        // Initialization of the helper
        SpatialRequestHelper helper = new SpatialRequestHelper();
        // Setting the properties
        helper.setCoverageProperties(coverageProperties);

        // Calculation of the final properties
        helper.prepare();

        // Ensure is not empty
        assertTrue(!helper.isEmpty());
        // Check resolution
        assertArrayEquals(helper.getRequestedResolution(), coverageProperties.getFullResolution(),
                TOLERANCE);
        // Check the same boundingBox
        assertTrue(helper.getCropBBox().contains(coverageProperties.getGeographicBBox()));
        // Check the same destination Area
        assertTrue(helper.getDestinationRasterArea().contains(coverageProperties.getRasterArea()));
    }

    @AfterClass
    public static void after() {
        PlanarImage.wrapRenderedImage(image).dispose();
    }
}
TOP

Related Classes of org.geotools.coverage.io.SpatialRequestHelperTest

TOP
Copyright © 2018 www.massapi.com. 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.