package com.revolsys.gis.cs;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.geometry.model.LineString;
import com.revolsys.geometry.model.Lineal;
import com.revolsys.geometry.model.LinearRing;
import com.revolsys.geometry.model.Point;
import com.revolsys.geometry.model.Polygon;
import com.revolsys.geometry.model.Polygonal;
import com.revolsys.geometry.model.Punctual;
import com.revolsys.geometry.model.impl.LineStringDouble;
import junit.framework.Assert;
public class GeometryFactoryTest {
private static GeometryFactory GEOMETRY_FACTORY = GeometryFactory.fixed(3857, 1.0, 1.0);
// public static void assertCoordinatesListEqual(final Geometry geometry,
// final LineString... pointsList) {
// System.out.println(geometry);
// final List<LineString> geometryPointsList = getAll(geometry);
// Assert.assertEquals("Number of coordinates Lists", pointsList.length,
// geometryPointsList.size());
// for (int i = 0; i < pointsList.length; i++) {
// final LineString points = pointsList[i];
// final LineString geometryPoints = geometryPointsList.get(i);
// Assert.assertEquals("Coordinates not equal", points, geometryPoints);
// }
// }
public static void assertCopyGeometry(final Geometry geometry, final LineString... pointsList) {
// assertCoordinatesListEqual(geometry, pointsList);
final Geometry copy = geometry.newGeometry(GEOMETRY_FACTORY);
final Class<? extends Geometry> geometryClass = geometry.getClass();
Assert.assertEquals("Geometry class", geometryClass, copy.getClass());
Assert.assertEquals("Geometry", geometry, copy);
// assertCoordinatesListEqual(copy, pointsList);
final Geometry copy2 = GEOMETRY_FACTORY.geometry(geometryClass, geometry);
Assert.assertEquals("Geometry class", geometryClass, copy2.getClass());
Assert.assertEquals("Geometry", geometry, copy2);
// assertCoordinatesListEqual(copy2, pointsList);
assertCreateGeometryCollection(geometry, pointsList);
}
public static void assertCreateGeometryCollection(final Geometry geometry,
final LineString... pointsList) {
if (geometry.isGeometryCollection()) {
if (geometry.getGeometryCount() == 1) {
final Geometry part = geometry.getGeometry(0);
final Class<? extends Geometry> geometryClass = geometry.getClass();
final Geometry copy2 = GEOMETRY_FACTORY.geometry(geometryClass, part);
Assert.assertEquals("Geometry class", geometryClass, copy2.getClass());
Assert.assertEquals("Geometry", geometry, copy2);
// assertCoordinatesListEqual(copy2, pointsList);
}
} else if (!(geometry instanceof LinearRing)) {
final Geometry[] geometries = {
geometry
};
final Geometry collection = GEOMETRY_FACTORY.geometry(geometries);
final Geometry copy = collection.getGeometry(0);
final Class<? extends Geometry> geometryClass = geometry.getClass();
Assert.assertEquals("Geometry class", geometryClass, copy.getClass());
Assert.assertEquals("Geometry", geometry, copy);
// assertCoordinatesListEqual(collection, pointsList);
final Geometry copy2 = GEOMETRY_FACTORY.geometry(geometryClass, collection);
Assert.assertEquals("Geometry class", geometryClass, copy2.getClass());
Assert.assertEquals("Geometry", geometry, copy2);
// assertCoordinatesListEqual(copy2, pointsList);
}
}
public static void main(final String[] args) {
testCreateGeometry();
}
private static void testCreateGeometry() {
final LineString pointPoints = new LineStringDouble(2, 0.0, 0);
final LineString point2Points = new LineStringDouble(2, 20.0, 20);
final LineString ringPoints = new LineStringDouble(2, 0.0, 0, 0, 100, 100, 100, 100, 0, 0, 0);
final LineString ring2Points = new LineStringDouble(2, 20.0, 20, 20, 80, 80, 80, 80, 20, 20,
20);
final LineString ring3Points = new LineStringDouble(2, 120.0, 120, 120, 180, 180, 180, 180, 120,
120, 120);
final Point point = GEOMETRY_FACTORY.point(2, 0.0, 0);
assertCopyGeometry(point, pointPoints);
final LineString line = GEOMETRY_FACTORY.lineString(ringPoints);
assertCopyGeometry(line, ringPoints);
final LinearRing linearRing = GEOMETRY_FACTORY.linearRing(ringPoints);
assertCopyGeometry(linearRing, ringPoints);
final Polygon polygon = GEOMETRY_FACTORY.polygon(ringPoints);
assertCopyGeometry(polygon, ringPoints);
final Polygon polygon2 = GEOMETRY_FACTORY.polygon(ringPoints, ring2Points);
assertCopyGeometry(polygon2, ringPoints, ring2Points);
final Punctual multiPoint = GEOMETRY_FACTORY.punctual(pointPoints);
assertCopyGeometry(multiPoint, pointPoints);
final Punctual multiPoint2 = GEOMETRY_FACTORY.punctual(pointPoints, point2Points);
assertCopyGeometry(multiPoint2, pointPoints, point2Points);
final Lineal multiLineString = GEOMETRY_FACTORY.lineal(ringPoints);
assertCopyGeometry(multiLineString, ringPoints);
final Lineal multiLineString2 = GEOMETRY_FACTORY.lineal(ringPoints, ring2Points);
assertCopyGeometry(multiLineString2, ringPoints, ring2Points);
final Polygonal multiPolygon = GEOMETRY_FACTORY.polygonal(ringPoints);
assertCopyGeometry(multiPolygon, ringPoints);
final Polygonal multiPolygon2 = GEOMETRY_FACTORY.polygonal(ringPoints, ring3Points);
assertCopyGeometry(multiPolygon2, ringPoints, ring3Points);
}
}