/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2007-2008, 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.renderer.shape; import junit.framework.TestCase; import org.geotools.data.DataUtilities; import org.opengis.feature.simple.SimpleFeatureType; public class BoundsExtractorTest extends TestCase { private SimpleFeatureType schema; protected void setUp() throws Exception { schema=DataUtilities.createType("type","the_geom:Geometry,name:String"); } public void testBBoxFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_BBOX); // // testFilter(factory, filter); } // public void testCONTAINSFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_CONTAINS); // // testFilter(factory, filter); // } // public void testCROSSESFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_CROSSES); // // testFilter(factory, filter); // } // public void testDWITHINFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_DWITHIN); // // testFilter(factory, filter); // } // public void testEQUALSFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_EQUALS); // // testFilter(factory, filter); // } // public void testINTERSECTSFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_INTERSECTS); // // testFilter(factory, filter); // } // public void testOVERLAPSFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_OVERLAPS); // // testFilter(factory, filter); // } // public void testTOUCHESFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_TOUCHES); // // testFilter(factory, filter); // } // public void testWITHINFilter() throws Exception { // FilterFactory factory=FilterFactoryFinder.createFilterFactory(); // // GeometryFilter filter=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_WITHIN); // // testFilter(factory, filter); // } // // private void testFilter(FilterFactory factory, GeometryFilter filter) throws IllegalFilterException { // Envelope bbox=new Envelope (10,100,10,100); // BBoxExpression bb = factory.createBBoxExpression(bbox); // // String geomName=schema.getDefaultGeometry().getName(); // AttributeExpression attr = factory.createAttributeExpression(geomName); // // filter.addLeftGeometry(attr); // filter.addRightGeometry(bb); // // GeometryFilter filter2=factory.createGeometryFilter(org.geotools.filter.Filter.GEOMETRY_BBOX); // filter2.addLeftGeometry(attr); // Coordinate[] coords=new Coordinate[]{new Coordinate(0,0),new Coordinate(30,0),new Coordinate(25,30)}; // Geometry geom=new GeometryFactory().createLineString(coords); // filter2.addRightGeometry(factory.createLiteralExpression(geom)); // // /* // * Extract bounds from F^F2 // */ // // BoundsExtractor extractor=new BoundsExtractor(new Envelope(-10,40, -10,40)); // filter.and(filter2).accept(extractor); // assertEquals(new Envelope(10,30,10,30), extractor.getIntersection()); // // /* // * Extract bounds from F|F2 // */ // extractor=new BoundsExtractor(new Envelope(-10,40, -10,40)); // filter.or(filter2).accept(extractor); // assertEquals(new Envelope(0,40,0,40), extractor.getIntersection()); // // /* // * Extract bounds from ~F // */ // extractor=new BoundsExtractor(new Envelope(-10,40, -10,40)); // filter.not().accept(extractor); // assertEquals(new Envelope(-10,40,-10,40), extractor.getIntersection()); // // /* // * Extract bounds from ~(F^F2) // */ // extractor=new BoundsExtractor(new Envelope(-10,40, -10,40)); // filter.and(filter2).not().accept(extractor); // assertEquals(new Envelope(-10,40,-10,40), extractor.getIntersection()); // // /* // * Extract bounds from ~(~(F|F2)) // */ // extractor=new BoundsExtractor(new Envelope(-10,40, -10,40)); // filter.or(filter2).not().not().accept(extractor); // assertEquals(new Envelope(0,40,0,40), extractor.getIntersection()); // // /* // * Extract bounds from ~(F|F2)^F2)=(F|F2|F2)=F|F2 but since F contains F2 ~(F1|F2) is always false so // * // */ // extractor=new BoundsExtractor(new Envelope(-10,40, -10,40)); // Filter newF=filter.or(filter2).not().and(filter2).not(); // newF.accept(extractor); // assertTrue(new Envelope(0,40,0,40).contains(extractor.getIntersection())); // // /* // * Disjoint case // * |--| |--| // * | | | | // * |--| |--| // */ // extractor=new BoundsExtractor(-10,0,-10,0); // filter.accept(extractor); // assertTrue(extractor.getIntersection().isNull()); // // /* // * Contains case // * |------| // * | |--| | // * | | | | // * | |--| | // * |------| // */ // extractor=new BoundsExtractor(new Envelope(0,110, 0,110)); // filter.accept(extractor); // assertEquals(new Envelope(10,100,10,100), extractor.getIntersection()); // // /* // * |------| // *|---| | // *| | | | // *|---| | // * |------| // */ // extractor=new BoundsExtractor(new Envelope(0,20, 20,90)); // filter.accept(extractor); // assertEquals(new Envelope(10,20,20,90), extractor.getIntersection()); // // /* // *|---| // *| |-|----| // *| | | | // *| | | | // *| | | | // *| |-|----| // *|---| // */ // extractor=new BoundsExtractor(new Envelope(0,20, 0,110)); // filter.accept(extractor); // assertEquals(new Envelope(10,20,10,100), extractor.getIntersection()); // // /* // * |---| // * |-|---|-| // * | |---| | // * | | // * | | // * |-------| // * // */ // extractor=new BoundsExtractor(new Envelope(20,90, 90,110)); // filter.accept(extractor); // assertEquals(new Envelope(20,90,90,100), extractor.getIntersection()); // // /* // *|-----------| // *| |-------| | // *|-----------| // * | | // * | | // * |-------| // * // */ // extractor=new BoundsExtractor(new Envelope(0,110, 90,110)); // filter.accept(extractor); // assertEquals(new Envelope(10,100,90,100), extractor.getIntersection()); // // /* // * // * |-------| // * | |---| // * | | | | // * | |---| // * |-------| // * // */ // extractor=new BoundsExtractor(new Envelope(90,110, 20,90)); // filter.accept(extractor); // assertEquals(new Envelope(90,100,20,90), extractor.getIntersection()); // // /* // * |---| // * |-----|-| | // * | | | | // * | | | | // * |-----|-| | // * |---| // */ // extractor=new BoundsExtractor(new Envelope(90,100, 0,110)); // filter.accept(extractor); // assertEquals(new Envelope(90,100,10,100), extractor.getIntersection()); // // /* // * // * |-------| // * | | // * | |---| | // * |-|---|-| // * |---| // */ // extractor=new BoundsExtractor(new Envelope(20,90, 0,20)); // filter.accept(extractor); // assertEquals(new Envelope(20,90,10,20), extractor.getIntersection()); // // // /* // * // * |-------| // * | | // *|-----------| // *| |-------| | // *|---------- | // */ // extractor=new BoundsExtractor(new Envelope(0,110, 0,20)); // filter.accept(extractor); // assertEquals(new Envelope(10,100,10,20), extractor.getIntersection()); // // /* // * // * |-------| // *|-----------| // *|-----------| // * |-------| // * // */ // extractor=new BoundsExtractor(new Envelope(0,110, 20,90)); // filter.accept(extractor); // assertEquals(new Envelope(10,100,20,90), extractor.getIntersection()); // // /* // * |---| // * |-|---|-| // * | | | | // * | | | | // * |-|---|-| // * |---| // */ // extractor=new BoundsExtractor(new Envelope(20,90,0,110)); // filter.accept(extractor); // assertEquals(new Envelope(20,90,10,100), extractor.getIntersection()); // // } }