/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-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.
*
* Created on 27 May 2002, 15:40
*/
package org.geotools.geometry.jts;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.geotools.referencing.operation.transform.ProjectiveTransform;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateSequence;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.TopologyException;
/**
*
* @author jamesm,iant
*
* @source $URL$
*/
public class LiteShapeTest extends TestCase {
private java.net.URL base = getClass().getResource("testData/");
public LiteShapeTest(java.lang.String testName) {
super(testName);
}
public static void main(java.lang.String[] args) {
junit.textui.TestRunner.run(suite());
}
public static Test suite() {
TestSuite suite = new TestSuite(LiteShapeTest.class);
return suite;
}
public void testLineShape() throws TransformException, FactoryException {
GeometryFactory geomFac = new GeometryFactory();
LineString lineString = makeSampleLineString(geomFac, 0, 0);
AffineTransform affineTransform = new AffineTransform();
LiteShape lineShape = new LiteShape(lineString, affineTransform, false);
assertFalse(lineShape.contains(0, 0));
assertTrue(lineShape.contains(60, 60));
assertFalse(lineShape.contains(50, 50, 10, 10));
assertTrue(lineShape.contains(new java.awt.Point(60, 60)));
assertFalse(lineShape.contains(new java.awt.geom.Rectangle2D.Float(50,
50, 10, 10)));
assertTrue(lineShape.getBounds2D().equals(
new Rectangle2D.Double(50, 50, 80, 250)));
assertTrue(lineShape.getBounds().equals(
new java.awt.Rectangle(50, 50, 80, 250)));
assertTrue(lineShape.intersects(0, 0, 100, 100));
assertTrue(lineShape.intersects(new Rectangle2D.Double(0, 0, 100, 100)));
assertFalse(lineShape.intersects(55, 55, 3, 100));
assertFalse(lineShape
.intersects(new Rectangle2D.Double(55, 55, 3, 100)));
}
public void testLineShape2() throws TransformException, FactoryException {
GeometryFactory geomFac = new GeometryFactory();
LineString lineString = makeSampleLineString(geomFac, 0, 0);
MathTransform transform = ProjectiveTransform.create(new AffineTransform());
Decimator decimator = new Decimator(transform);
LiteShape2 lineShape = new LiteShape2(lineString, transform, decimator, false);
assertFalse(lineShape.contains(0, 0));
assertTrue(lineShape.contains(60, 60));
assertFalse(lineShape.contains(50, 50, 10, 10));
assertTrue(lineShape.contains(new java.awt.Point(60, 60)));
assertFalse(lineShape.contains(new java.awt.geom.Rectangle2D.Float(50,
50, 10, 10)));
assertTrue(lineShape.getBounds2D().equals(
new Rectangle2D.Double(50, 50, 80, 250)));
assertTrue(lineShape.getBounds().equals(
new java.awt.Rectangle(50, 50, 80, 250)));
assertTrue(lineShape.intersects(0, 0, 100, 100));
assertTrue(lineShape.intersects(new Rectangle2D.Double(0, 0, 100, 100)));
assertFalse(lineShape.intersects(55, 55, 3, 100));
assertFalse(lineShape
.intersects(new Rectangle2D.Double(55, 55, 3, 100)));
}
public void testPolygonShape() throws TransformException, FactoryException {
GeometryFactory geomFac = new GeometryFactory();
Polygon polygon = makeSamplePolygon(geomFac, 0, 0);
LiteShape2 lineShape = new LiteShape2(polygon, ProjectiveTransform
.create(new AffineTransform()), new Decimator(
ProjectiveTransform.create(new AffineTransform())), false);
assertFalse(lineShape.contains(0, 0));
assertTrue(lineShape.contains(100, 100));
assertFalse(lineShape.contains(50, 50, 10, 10));
assertTrue(lineShape.contains(100, 100, 10, 10));
assertTrue(lineShape.contains(new java.awt.Point(70, 90)));
assertFalse(lineShape.contains(new java.awt.geom.Rectangle2D.Float(50,
50, 10, 10)));
assertTrue(lineShape.getBounds2D().equals(
new Rectangle2D.Double(60, 70, 70, 50)));
assertTrue(lineShape.getBounds().equals(
new java.awt.Rectangle(60, 70, 70, 50)));
assertTrue(lineShape.intersects(0, 0, 100, 100));
assertTrue(lineShape.intersects(new Rectangle2D.Double(0, 0, 100, 100)));
assertFalse(lineShape.intersects(55, 55, 3, 100));
assertFalse(lineShape
.intersects(new Rectangle2D.Double(55, 55, 3, 100)));
}
public void testCloning() throws TransformException, FactoryException {
LiteCoordinateSequenceFactory csFac = new LiteCoordinateSequenceFactory();
GeometryFactory geomFac = new GeometryFactory(csFac);
CoordinateSequence cs = csFac.create(4, 2);
cs.setOrdinate(0, 0, 10);
cs.setOrdinate(0, 1, 10);
cs.setOrdinate(1, 0, 12);
cs.setOrdinate(1, 1, 12);
cs.setOrdinate(2, 0, 14);
cs.setOrdinate(2, 1, 12);
cs.setOrdinate(3, 0, 30);
cs.setOrdinate(3, 1, 10);
LineString ls = geomFac.createLineString(cs);
LineString copy = (LineString) ls.clone();
LiteShape2 ltCloning = new LiteShape2(ls, ProjectiveTransform.create(AffineTransform.getScaleInstance(10, 10)), new Decimator(4,4), true);
assertTrue(ls.equalsExact(copy));
LiteShape2 ltNotCloning = new LiteShape2(ls, ProjectiveTransform.create(AffineTransform.getScaleInstance(10, 10)), new Decimator(4,4), true, false);
assertFalse(ls.equalsExact(copy));
}
private LineString makeSampleLineString(final GeometryFactory geomFac,
double xoff, double yoff) {
Coordinate[] linestringCoordinates = new Coordinate[8];
linestringCoordinates[0] = new Coordinate(50.0d + xoff, 50.0d + yoff);
linestringCoordinates[1] = new Coordinate(60.0d + xoff, 50.0d + yoff);
linestringCoordinates[2] = new Coordinate(60.0d + xoff, 60.0d + yoff);
linestringCoordinates[3] = new Coordinate(70.0d + xoff, 60.0d + yoff);
linestringCoordinates[4] = new Coordinate(70.0d + xoff, 70.0d + yoff);
linestringCoordinates[5] = new Coordinate(80.0d + xoff, 70.0d + yoff);
linestringCoordinates[6] = new Coordinate(80.0d + xoff, 80.0d + yoff);
linestringCoordinates[7] = new Coordinate(130.0d + xoff, 300.0d + yoff);
LineString line = geomFac.createLineString(linestringCoordinates);
return line;
}
private com.vividsolutions.jts.geom.Polygon makeSamplePolygon(
final GeometryFactory geomFac, double xoff, double yoff) {
Coordinate[] polygonCoordinates = new Coordinate[10];
polygonCoordinates[0] = new Coordinate(70 + xoff, 70 + yoff);
polygonCoordinates[1] = new Coordinate(60 + xoff, 90 + yoff);
polygonCoordinates[2] = new Coordinate(60 + xoff, 110 + yoff);
polygonCoordinates[3] = new Coordinate(70 + xoff, 120 + yoff);
polygonCoordinates[4] = new Coordinate(90 + xoff, 110 + yoff);
polygonCoordinates[5] = new Coordinate(110 + xoff, 120 + yoff);
polygonCoordinates[6] = new Coordinate(130 + xoff, 110 + yoff);
polygonCoordinates[7] = new Coordinate(130 + xoff, 90 + yoff);
polygonCoordinates[8] = new Coordinate(110 + xoff, 70 + yoff);
polygonCoordinates[9] = new Coordinate(70 + xoff, 70 + yoff);
try {
LinearRing ring = geomFac.createLinearRing(polygonCoordinates);
com.vividsolutions.jts.geom.Polygon polyg = geomFac.createPolygon(
ring, null);
return polyg;
} catch (TopologyException te) {
fail("Error creating sample polygon for testing " + te);
}
return null;
}
}