@Test public void sanity() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); List<Polygon> polygons = new ArrayList<>(); polygons.add(Polygon.fromOuterInner(outer)); polygons.add(Polygon.fromOuterInner(outer)); MultiPolygon multiPolygon = MultiPolygon.fromPolygons(polygons); assertNotNull(multiPolygon); }
@Test public void bbox_nullWhenNotSet() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); List<Polygon> polygons = new ArrayList<>(); polygons.add(Polygon.fromOuterInner(outer)); polygons.add(Polygon.fromOuterInner(outer)); MultiPolygon multiPolygon = MultiPolygon.fromPolygons(polygons); assertNull(multiPolygon.bbox()); }
@Test public void bbox_doesNotSerializeWhenNotPresent() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); List<Polygon> polygons = new ArrayList<>(); polygons.add(Polygon.fromOuterInner(outer)); polygons.add(Polygon.fromOuterInner(outer)); MultiPolygon multiPolygon = MultiPolygon.fromPolygons(polygons); compareJson(multiPolygon.toJson(), "{\"type\":\"MultiPolygon\"," + "\"coordinates\":[[[[1,2],[2,3],[3,4],[1,2]]],[[[1,2],[2,3],[3,4],[1,2]]]]}"); }
@Test public void sanity() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); Polygon polygon = Polygon.fromOuterInner(outer); assertNotNull(polygon); }
@Test public void testSerializable() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); BoundingBox bbox = BoundingBox.fromLngLats(1.0, 2.0, 3.0, 4.0); List<Polygon> polygons = new ArrayList<>(); polygons.add(Polygon.fromOuterInner(outer)); polygons.add(Polygon.fromOuterInner(outer)); MultiPolygon multiPolygon = MultiPolygon.fromPolygons(polygons, bbox); byte[] bytes = serialize(multiPolygon); assertEquals(multiPolygon, deserialize(bytes, MultiPolygon.class)); }
@Test public void fromOuterInner_handlesSingleLineStringCorrectly() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(10.0, 2.0)); points.add(Point.fromLngLat(5.0, 2.0)); points.add(Point.fromLngLat(3.0, 2.0)); points.add(Point.fromLngLat(10.0, 2.0)); LineString lineString = LineString.fromLngLats(points); Polygon polygon = Polygon.fromOuterInner(lineString); assertEquals(Point.fromLngLat(10.0, 2.0), polygon.coordinates().get(0).get(0)); }
@Test public void bbox_doesSerializeWhenPresent() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); BoundingBox bbox = BoundingBox.fromLngLats(1.0, 2.0, 3.0, 4.0); List<Polygon> polygons = new ArrayList<>(); polygons.add(Polygon.fromOuterInner(outer)); polygons.add(Polygon.fromOuterInner(outer)); MultiPolygon multiPolygon = MultiPolygon.fromPolygons(polygons, bbox); compareJson(multiPolygon.toJson(), "{\"type\":\"MultiPolygon\",\"bbox\":[1.0,2.0,3.0,4.0]," + "\"coordinates\":[[[[1,2],[2,3],[3,4],[1,2]]],[[[1,2],[2,3],[3,4],[1,2]]]]}"); }
@Test public void fromOuterInner_throwsNotConnectedLinearRingException() throws Exception { thrown.expect(GeoJsonException.class); thrown.expectMessage("LinearRings require first and last coordinate to be identical."); List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(10.0, 2.0)); points.add(Point.fromLngLat(5.0, 2.0)); points.add(Point.fromLngLat(3.0, 2.0)); points.add(Point.fromLngLat(5.0, 2.0)); LineString lineString = LineString.fromLngLats(points); Polygon polygon = Polygon.fromOuterInner(lineString); }
@Test public void fromOuterInner_throwsNotLinearRingException() throws Exception { thrown.expect(GeoJsonException.class); thrown.expectMessage("LinearRings need to be made up of 4 or more coordinates."); List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(10.0, 2.0)); points.add(Point.fromLngLat(5.0, 2.0)); points.add(Point.fromLngLat(3.0, 2.0)); LineString lineString = LineString.fromLngLats(points); Polygon polygon = Polygon.fromOuterInner(lineString); }
@Test public void bbox_nullWhenNotSet() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); List<LineString> inner = new ArrayList<>(); inner.add(LineString.fromLngLats(points)); inner.add(LineString.fromLngLats(points)); Polygon polygon = Polygon.fromOuterInner(outer, inner); assertNull(polygon.bbox()); }
@Test public void bbox_doesNotSerializeWhenNotPresent() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); List<LineString> inner = new ArrayList<>(); inner.add(LineString.fromLngLats(points)); inner.add(LineString.fromLngLats(points)); Polygon polygon = Polygon.fromOuterInner(outer, inner); compareJson(polygon.toJson(), "{\"type\":\"Polygon\",\"coordinates\":" + "[[[1,2],[2,3],[3,4],[1,2]],[[1,2],[2,3],[3,4],[1,2]],[[1,2],[2,3],[3,4],[1,2]]]}"); }
@Test public void bbox_doesSerializeWhenPresent() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); BoundingBox bbox = BoundingBox.fromLngLats(1.0, 2.0, 3.0, 4.0); List<LineString> inner = new ArrayList<>(); inner.add(LineString.fromLngLats(points)); inner.add(LineString.fromLngLats(points)); Polygon polygon = Polygon.fromOuterInner(outer, bbox, inner); compareJson(polygon.toJson(), "{\"type\":\"Polygon\",\"bbox\":[1.0,2.0,3.0,4.0],\"coordinates\":" + "[[[1,2],[2,3],[3,4],[1,2]],[[1,2],[2,3],[3,4],[1,2]],[[1,2],[2,3],[3,4],[1,2]]]}"); }
@Test public void testSerializable() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); BoundingBox bbox = BoundingBox.fromLngLats(1.0, 2.0, 3.0, 4.0); List<LineString> inner = new ArrayList<>(); inner.add(LineString.fromLngLats(points)); inner.add(LineString.fromLngLats(points)); Polygon polygon = Polygon.fromOuterInner(outer, bbox, inner); byte[] bytes = serialize(polygon); assertEquals(polygon, deserialize(bytes, Polygon.class)); }
@Test public void fromOuterInner_handlesOuterAndInnerLineStringCorrectly() throws Exception { List<Point> outer = new ArrayList<>(); outer.add(Point.fromLngLat(10.0, 2.0)); outer.add(Point.fromLngLat(5.0, 2.0)); outer.add(Point.fromLngLat(3.0, 2.0)); outer.add(Point.fromLngLat(10.0, 2.0)); LineString outerLineString = LineString.fromLngLats(outer); List<Point> inner = new ArrayList<>(); inner.add(Point.fromLngLat(5.0, 2.0)); inner.add(Point.fromLngLat(2.5, 2.0)); inner.add(Point.fromLngLat(1.5, 2.0)); inner.add(Point.fromLngLat(5.0, 2.0)); LineString innerLineString = LineString.fromLngLats(inner); Polygon polygon = Polygon.fromOuterInner(outerLineString, innerLineString); assertEquals(Point.fromLngLat(10.0, 2.0), polygon.coordinates().get(0).get(0)); assertEquals(outerLineString, polygon.outer()); assertEquals(1, polygon.inner().size()); assertEquals(innerLineString, polygon.inner().get(0)); }
@Test public void fromOuterInner_withABoundingBox() throws Exception { List<Point> outer = new ArrayList<>(); outer.add(Point.fromLngLat(10.0, 2.0)); outer.add(Point.fromLngLat(5.0, 2.0)); outer.add(Point.fromLngLat(3.0, 2.0)); outer.add(Point.fromLngLat(10.0, 2.0)); LineString outerLineString = LineString.fromLngLats(outer); List<Point> inner = new ArrayList<>(); inner.add(Point.fromLngLat(5.0, 2.0)); inner.add(Point.fromLngLat(2.5, 2.0)); inner.add(Point.fromLngLat(1.5, 2.0)); inner.add(Point.fromLngLat(5.0, 2.0)); LineString innerLineString = LineString.fromLngLats(inner); BoundingBox bbox = BoundingBox.fromLngLats(1.0, 2.0, 3.0, 4.0); Polygon polygon = Polygon.fromOuterInner(outerLineString, bbox, innerLineString); assertEquals(bbox, polygon.bbox()); assertEquals(outerLineString, polygon.outer()); assertEquals(1, polygon.inner().size()); assertEquals(innerLineString, polygon.inner().get(0)); }
@Test public void bbox_returnsCorrectBbox() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); BoundingBox bbox = BoundingBox.fromLngLats(1.0, 2.0, 3.0, 4.0); List<Polygon> polygons = new ArrayList<>(); polygons.add(Polygon.fromOuterInner(outer)); polygons.add(Polygon.fromOuterInner(outer)); MultiPolygon multiPolygon = MultiPolygon.fromPolygons(polygons, bbox); assertNotNull(multiPolygon.bbox()); assertEquals(1.0, multiPolygon.bbox().west(), DELTA); assertEquals(2.0, multiPolygon.bbox().south(), DELTA); assertEquals(3.0, multiPolygon.bbox().east(), DELTA); assertEquals(4.0, multiPolygon.bbox().north(), DELTA); }
@Test public void bbox_returnsCorrectBbox() throws Exception { List<Point> points = new ArrayList<>(); points.add(Point.fromLngLat(1.0, 2.0)); points.add(Point.fromLngLat(2.0, 3.0)); points.add(Point.fromLngLat(3.0, 4.0)); points.add(Point.fromLngLat(1.0, 2.0)); LineString outer = LineString.fromLngLats(points); BoundingBox bbox = BoundingBox.fromLngLats(1.0, 2.0, 3.0, 4.0); List<LineString> inner = new ArrayList<>(); inner.add(LineString.fromLngLats(points)); inner.add(LineString.fromLngLats(points)); Polygon polygon = Polygon.fromOuterInner(outer, bbox, inner); assertNotNull(polygon.bbox()); assertEquals(1.0, polygon.bbox().west(), DELTA); assertEquals(2.0, polygon.bbox().south(), DELTA); assertEquals(3.0, polygon.bbox().east(), DELTA); assertEquals(4.0, polygon.bbox().north(), DELTA); }