package org.geotools.geometry.jts.coordinatesequence;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.geotools.geometry.jts.GeometryBuilder;
import org.geotools.geometry.jts.LiteCoordinateSequence;
import org.geotools.geometry.jts.LiteCoordinateSequenceFactory;
import org.junit.Test;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
public class CoordinateSequencesTest {
static GeometryFactory gf = new GeometryFactory();
static LiteCoordinateSequenceFactory liteCSF = new LiteCoordinateSequenceFactory();
static GeometryFactory liteGF = new GeometryFactory(liteCSF);
static GeometryBuilder geomBuilder = new GeometryBuilder();
@Test
public void testCoordinateDimensionPointLite1D() {
Geometry geom = geomBuilder.point(1);
assertEquals(1, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionPointLite2D() {
Geometry geom = liteGF.createPoint(new LiteCoordinateSequence(new double[] { 1, 2 }, 2));
assertEquals(2, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionPointLite3D() {
Geometry geom = liteGF
.createPoint(new LiteCoordinateSequence(new double[] { 1, 2, 99 }, 3));
assertEquals(3, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionLineString1D() {
Geometry geom = gf.createLineString(new Coordinate[] {
new Coordinate(1, Coordinate.NULL_ORDINATE),
new Coordinate(3, Coordinate.NULL_ORDINATE) });
assertEquals(1, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionLineString2D() {
Geometry geom = gf.createLineString(new Coordinate[] { new Coordinate(1, 2),
new Coordinate(3, 4) });
assertEquals(2, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionLineStringLite3D() {
Geometry geom = liteGF.createLineString(liteCSF.create(
new double[] { 1, 2, 100, 3, 4, 200 }, 3));
assertEquals(3, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionPolygonLite2D() {
Geometry geom = liteGF.createPolygon(liteGF.createLinearRing(liteCSF.create(new double[] {
1, 1, 2, 1, 2, 2, 1, 2, 1, 1 }, 2)), null);
assertEquals(2, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionPolygonLite3D() {
Geometry geom = liteGF.createPolygon(
liteGF.createLinearRing(liteCSF.create(new double[] { 1, 1, 100, 2, 1, 99, 2, 2,
98, 1, 2, 97, 1, 1, 100 }, 3)), null);
assertEquals(3, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionPolygonEmpty() {
Geometry geom = gf.createPolygon(gf.createLinearRing((Coordinate[]) null), null);
// empty geometries using CoordinateArraySequence always report 3
assertEquals(3, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionPolygonEmptyLite2D() {
Geometry geom = liteGF.createPolygon(
liteGF.createLinearRing(liteCSF.create(new double[0], 2)), null);
assertEquals(2, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionPolygonEmptyLite3D() {
Geometry geom = liteGF.createPolygon(
liteGF.createLinearRing(liteCSF.create(new double[0], 3)), null);
assertEquals(3, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionGeometryCollectionEmptyLite3D() {
Geometry geom = liteGF.createGeometryCollection(new Geometry[0]);
assertEquals(3, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testCoordinateDimensionGeometryCollectionEmpty() {
Geometry geom = gf.createGeometryCollection(new Geometry[0]);
// empty GCs have no sequences to carry dimension, so always report dim=3
assertEquals(3, CoordinateSequences.coordinateDimension(geom));
}
@Test
public void testEqualityND() {
Geometry g1 = liteGF.createPolygon(
liteGF.createLinearRing(liteCSF.create(new double[] { 1, 1, 100, 2, 1, 99, 2, 2,
98, 1, 2, 97, 1, 1, 100 }, 3)), null);
Geometry g2 = liteGF.createPolygon(
liteGF.createLinearRing(liteCSF.create(new double[] { 1, 1, 2, 1, 2, 2,
1, 2, 1, 1 }, 2)), null);
Geometry g3 = liteGF.createPolygon(
liteGF.createLinearRing(liteCSF.create(new double[] { 1, 1, 200, 2, 1, 199, 2, 2,
198, 1, 2, 197, 1, 1, 200 }, 3)), null);
Geometry g4 = liteGF.createPolygon(
liteGF.createLinearRing(liteCSF.create(new double[] { 1, 1, 100, 2, 1, 99, 2, 2,
98, 1, 2, 97, 1, 1, 100 }, 3)), null);
assertTrue(CoordinateSequences.equalsND(g1, g4));
assertFalse(CoordinateSequences.equalsND(g1, g2));
assertFalse(CoordinateSequences.equalsND(g1, g3));
}
}