/* Copyright (c) 2001 - 2013 OpenPlans - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wps.gs;
import static org.junit.Assert.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import javax.imageio.ImageIO;
import org.geoserver.wps.WPSTestSupport;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverage.grid.GridCoverageFactory;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.function.RenderingTransformation;
import org.geotools.geometry.Envelope2D;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.junit.Test;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.Function;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
public class GeorectifyCoverageTest extends WPSTestSupport {
@Test
public void testIsRenderingProcess() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory();
Function f = ff.function("gs:GeorectifyCoverage");
assertNotNull(f);
assertTrue(f instanceof RenderingTransformation);
}
@Test
public void testGeorectify() throws IOException, MismatchedDimensionException,
NoSuchAuthorityCodeException, FactoryException {
GeorectifyCoverage process = applicationContext.getBean(GeorectifyCoverage.class);
if (!process.isAvailable()) {
LOGGER.warning("GDAL utilities are not in the path, skipping the test");
return;
}
BufferedImage image = ImageIO.read(new File("./src/test/resources/rotated-image.png"));
GridCoverage2D coverage = new GridCoverageFactory().create(
"test",
image,
new ReferencedEnvelope(0, image.getWidth(), 0, image.getHeight(), CRS
.decode("EPSG:404000")));
String gcps = "[" + //
"[[183, 33], [-74.01183158, 40.70852996]]," + //
"[[103, 114], [-74.01083751, 40.70754684]]," + //
"[[459, 298], [-74.00857344, 40.71194565]]," + //
"[[252, 139], [-74.01053024, 40.70938712]]" + //
"]";
Map<String, Object> map = process.execute(coverage, gcps, null, DefaultGeographicCRS.WGS84,
null, null, null, false, null, null);
GridCoverage2D warped = (GridCoverage2D) map.get("result");
assertEquals(CRS.decode("EPSG:4326", true), warped.getCoordinateReferenceSystem());
// check the expected location, the output file also got verified visually
Envelope2D envelope = warped.getEnvelope2D();
assertEquals(-74.0122393, envelope.getMinX(), 1e-6);
assertEquals(-74.0078822, envelope.getMaxX(), 1e-6);
assertEquals(40.7062701, envelope.getMinY(), 1e-6);
assertEquals(40.7126021, envelope.getMaxY(), 1e-6);
}
}