package org.geotools.geometry.jts; import static org.junit.Assert.*; import org.geotools.referencing.crs.DefaultEngineeringCRS; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.junit.Test; import org.opengis.geometry.MismatchedReferenceSystemException; import com.vividsolutions.jts.geom.Coordinate; import java.awt.geom.Rectangle2D; public class ReferencedEnvelopeTest { @Test public void testEverything() { ReferencedEnvelope everything = ReferencedEnvelope.EVERYTHING; ReferencedEnvelope world = new ReferencedEnvelope( ReferencedEnvelope.EVERYTHING ); assertSame( everything, ReferencedEnvelope.EVERYTHING ); assertNotSame( everything, world ); assertEquals( everything, world ); assertEquals( world, everything ); assertFalse( "This is not an empty envelope", everything.isEmpty() ); assertTrue( "This is a null envelope", everything.isNull() ); Coordinate center = everything.centre(); assertNotNull( center ); double area = everything.getArea(); assertTrue( "area="+area, Double.isInfinite( area ) ); area = world.getArea(); assertTrue( "area="+area, Double.isInfinite( area ) ); try { everything.setBounds( new ReferencedEnvelope() ); fail("Expected IllegalStateException"); } catch( IllegalStateException expected ){ // ignore } everything.setToNull(); everything.translate(1.0, 1.0); assertEquals( everything, world ); assertEquals( world, everything ); assertEquals( world.getMaximum(0), everything.getMaximum(0),0.0); assertEquals( world.getMaximum(1), everything.getMaximum(1),0.0); assertEquals( world.getMinimum(0), everything.getMinimum(0),0.0); assertEquals( world.getMinimum(1), everything.getMinimum(1),0.0); assertEquals( world.getMedian(0), everything.getMedian(0),0.0); assertEquals( world.getMedian(1), everything.getMedian(0),0.0); } @Test public void intersection() throws Exception { ReferencedEnvelope australia = new ReferencedEnvelope( DefaultGeographicCRS.WGS84 ); australia.include( 40, 110); australia.include( 10, 150); ReferencedEnvelope newZealand = new ReferencedEnvelope( DefaultEngineeringCRS.CARTESIAN_2D ); newZealand.include( 50, 165); newZealand.include( 33, 180); try { australia.intersection(newZealand); fail( "Expected a missmatch of CoordianteReferenceSystem"); } catch (MismatchedReferenceSystemException t){ // expected } } @Test public void include() throws Exception { ReferencedEnvelope australia = new ReferencedEnvelope( DefaultGeographicCRS.WGS84 ); australia.include( 40, 110); australia.include( 10, 150); ReferencedEnvelope newZealand = new ReferencedEnvelope( DefaultEngineeringCRS.CARTESIAN_2D ); newZealand.include( 50, 165); newZealand.include( 33, 180); try { australia.expandToInclude( newZealand); fail( "Expected a missmatch of CoordianteReferenceSystem"); } catch (MismatchedReferenceSystemException t){ // expected } try { australia.include( newZealand); fail( "Expected a missmatch of CoordianteReferenceSystem"); } catch (MismatchedReferenceSystemException t){ // expected } } @Test public void empty() { // ensure empty can grab a default CRS when starting from nothing ReferencedEnvelope bbox = new ReferencedEnvelope(); // this is empty assertNull(bbox.getCoordinateReferenceSystem()); ReferencedEnvelope australia = new ReferencedEnvelope(DefaultGeographicCRS.WGS84); australia.include(40, 110); australia.include(10, 150); bbox.include(australia); assertEquals( australia.getCoordinateReferenceSystem(), bbox.getCoordinateReferenceSystem() ); } @Test public void testBoundsEquals2D() { Rectangle2D bounds = new Rectangle2D.Double(-20.0, -20.0, 40.0, 40.0); ReferencedEnvelope env1 = new ReferencedEnvelope(bounds, null); ReferencedEnvelope env2 = new ReferencedEnvelope(bounds, null); double eps = 1.0e-4d; assertTrue(env1.boundsEquals2D(env2, eps)); bounds = new Rectangle2D.Double(-20.01, -20.01, 40.0, 40.0); env2 = new ReferencedEnvelope(bounds, null); assertFalse(env1.boundsEquals2D(env2, eps)); } }