package org.geotools.filter;
import junit.framework.TestCase;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.function.GeometryTransformationVisitor;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.Function;
public class GeometryFilterVisitorTest extends TestCase {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
public void testSimpleBuffer() {
org.opengis.filter.expression.Expression geomTx = ff.function("buffer", ff.property("the_geom"), ff.literal(2));
ReferencedEnvelope re = new ReferencedEnvelope(0, 2, 0, 2, null);
GeometryTransformationVisitor visitor = new GeometryTransformationVisitor();
ReferencedEnvelope result = (ReferencedEnvelope) geomTx.accept(visitor, re);
ReferencedEnvelope expected = new ReferencedEnvelope(-2, 4, -2, 4, null);
assertEquals(expected, result);
}
public void testChainBuffer() {
// check buffer chaining
Function innerBuffer = ff.function("buffer", ff.property("the_geom"), ff.literal(3));
Function geomTx = ff.function("buffer", innerBuffer, ff.literal(2));
ReferencedEnvelope re = new ReferencedEnvelope(0, 2, 0, 2, null);
GeometryTransformationVisitor visitor = new GeometryTransformationVisitor();
ReferencedEnvelope result = (ReferencedEnvelope) geomTx.accept(visitor, re);
ReferencedEnvelope expected = new ReferencedEnvelope(-5, 7, -5, 7, null);
assertEquals(expected, result);
}
public void testChainIntersection() {
Function innerBuffer1 = ff.function("buffer", ff.property("the_geom"), ff.literal(3));
Function innerBuffer2 = ff.function("buffer", ff.property("other_geom"), ff.literal(2));
Function geomTx = ff.function("intersection", innerBuffer1, innerBuffer2);
ReferencedEnvelope re = new ReferencedEnvelope(0, 2, 0, 2, null);
GeometryTransformationVisitor visitor = new GeometryTransformationVisitor();
ReferencedEnvelope result = (ReferencedEnvelope) geomTx.accept(visitor, re);
ReferencedEnvelope expected = new ReferencedEnvelope(-3, 5, -3, 5, null);
assertEquals(expected, result);
}
}