/* Copyright 2013 The jeo project. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.jeo.geom; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.LinearRing; import com.vividsolutions.jts.geom.MultiLineString; import com.vividsolutions.jts.geom.MultiPoint; import com.vividsolutions.jts.geom.MultiPolygon; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; public class GeomBuilderTest { GeomBuilder gb; @Before public void setUp() { gb = new GeomBuilder(); } @Test public void testPoint() { Point p = gb.point(1,2).toPoint(); assertPoint(p, 1, 2); } @Test public void testPointZ() { Point p = gb.pointz(1,2,3).toPoint(); assertPointZ(p, 1,2,3); } @Test public void testLineString() { LineString l = gb.point(1,2).point(3,4).toLineString(); assertEquals(2, l.getNumPoints()); assertPoint(l.getPointN(0), 1,2); assertPoint(l.getPointN(1), 3,4); } @Test public void testLineStringZ() { LineString l = gb.pointsz(1,2,3,4,5,6).toLineString(); assertEquals(2, l.getNumPoints()); assertPointZ(l.getPointN(0), 1,2,3); assertPointZ(l.getPointN(1), 4,5,6); } @Test public void testLinearRing() { LinearRing l = gb.points(1,2,3,4,5,6).toLinearRing(); assertEquals(4, l.getNumPoints()); assertPoint(l.getPointN(0), 1,2); assertPoint(l.getPointN(1), 3,4); assertPoint(l.getPointN(2), 5,6); assertPoint(l.getPointN(3), 1,2); } @Test public void testPolygon() { Polygon p = gb.points(1,2,3,4,5,6,1,2).ring().toPolygon(); LineString outer = p.getExteriorRing(); assertEquals(4, outer.getNumPoints()); assertPoint(outer.getPointN(0), 1,2); assertPoint(outer.getPointN(1), 3,4); assertPoint(outer.getPointN(2), 5,6); assertPoint(outer.getPointN(3), 1,2); } @Test public void testPolygonWithHole() { Polygon p = gb.points(0,0,10,0,10,10,0,10,0,0).ring().points(4,4,6,4,6,6,4,6,4,4).ring() .toPolygon(); LineString outer = p.getExteriorRing(); assertEquals(5, outer.getNumPoints()); assertPoint(outer.getPointN(0), 0,0); assertPoint(outer.getPointN(1), 10,0); assertPoint(outer.getPointN(2), 10,10); assertPoint(outer.getPointN(3), 0,10); assertPoint(outer.getPointN(4), 0,0); assertEquals(1, p.getNumInteriorRing()); LineString inner = p.getInteriorRingN(0); assertEquals(5, outer.getNumPoints()); assertPoint(inner.getPointN(0), 4,4); assertPoint(inner.getPointN(1), 6,4); assertPoint(inner.getPointN(2), 6,6); assertPoint(inner.getPointN(3), 4,6); assertPoint(inner.getPointN(4), 4,4); } @Test public void testMultiPoint() { MultiPoint mp = gb.points(0,1,2,3).toMultiPoint(); assertEquals(2, mp.getNumGeometries()); assertPoint((Point) mp.getGeometryN(0), 0,1); assertPoint((Point) mp.getGeometryN(1), 2,3); } @Test public void testMultiLineString() { MultiLineString ml = gb.points(0,1,2,3).lineString().points(4,5,6,7).lineString().toMultiLineString(); assertEquals(2, ml.getNumGeometries()); LineString l1 = (LineString) ml.getGeometryN(0); assertEquals(2, l1.getNumPoints()); assertPoint(l1.getPointN(0), 0,1); assertPoint(l1.getPointN(1), 2,3); LineString l2 = (LineString) ml.getGeometryN(1); assertEquals(2, l2.getNumPoints()); assertPoint(l2.getPointN(0), 4,5); assertPoint(l2.getPointN(1), 6,7); } @Test public void testMultiPolygon() { MultiPolygon mp = gb.points(1,2,3,4,5,6,1,2).ring().polygon() .points(7,8,9,10,11,12,7,8).ring().polygon().toMultiPolygon(); assertEquals(2, mp.getNumGeometries()); } @Test public void testGeometryCollection() { GeometryCollection col = gb.point(1,2).point().points(1,2,3,4).lineString() .points(1,2,3,4,5,6,1,2).ring().polygon().toCollection(); assertEquals(3, col.getNumGeometries()); assertTrue(col.getGeometryN(0) instanceof Point); assertTrue(col.getGeometryN(1) instanceof LineString); assertTrue(col.getGeometryN(2) instanceof Polygon); } void assertPoint(Point p, double x, double y) { assertEquals(x, p.getX(), 0.1); assertEquals(y, p.getY(), 0.1); } void assertPointZ(Point p, double x, double y, double z) { assertEquals(x, p.getX(), 0.1); assertEquals(y, p.getY(), 0.1); assertEquals(z, p.getCoordinate().z, 0.1); } }