/** * Returns the circle containing this arc * * @return */ public static CircularRing toCircle( CircularArc arc, GeometryFactory geometryFactory, double tolerance) { double radius = arc.getRadius(); Coordinate center = arc.getCenter(); double[] rcp = new double[10]; rcp[0] = center.x + radius; rcp[1] = center.y; rcp[2] = center.x; rcp[3] = center.y + radius; rcp[4] = center.x - radius; rcp[5] = center.y; rcp[6] = center.x; rcp[7] = center.y - radius; rcp[8] = center.x + radius; rcp[9] = center.y; return new CircularRing(rcp, geometryFactory, tolerance); }
Coordinate center = arc.getCenter(); double radius = arc.getRadius(); double[] cp = arc.getControlPoints();
return false; Coordinate center = first.getCenter(); final int numArcs = curved.getNumArcs(); for (int i = 1; i < numArcs; i++) { return false; Coordinate cc = curr.getCenter(); if (!CircularArc.equals(cc.x, center.x) || !CircularArc.equals(cc.y, center.y)) { return false; return false; center = curr.getCenter(); } else { if (!CircularArc.equals(curr.getRadius(), radius)) { return false; Coordinate cc = curr.getCenter(); if (!CircularArc.equals(cc.x, center.x) || !CircularArc.equals(cc.y, center.y)) {
/** * Returns a curved geometry factory given the linearization constraints, the original factory, * and a coordinate sequence representing the control points of a curved geometry * * @param arcParameters * @param gFactory * @param cs * @return */ public static CurvedGeometryFactory getCurvedGeometryFactory( ArcParameters arcParameters, GeometryFactory gFactory, CoordinateSequence cs) { CurvedGeometryFactory factory; if (gFactory instanceof CurvedGeometryFactory) { factory = (CurvedGeometryFactory) gFactory; } else if (arcParameters != null && arcParameters.getLinearizationTolerance() != null) { double tolerance = Double.MAX_VALUE; if (cs != null) { CircularArc arc = CurvedGeometries.getArc(cs, 0); Circle c = new Circle(arc.getCenter(), arc.getRadius()); tolerance = arcParameters.getLinearizationTolerance().getTolerance(c); } factory = new CurvedGeometryFactory(gFactory, tolerance); } else { factory = new CurvedGeometryFactory(gFactory, Double.MAX_VALUE); } return factory; } }
@Test public void testMatchingSequence() { Circle circle = new Circle(100); // create control points that will match exactly the points the algo should generate CircularArc arc = circle.getCircularArc(0, CircularArc.HALF_PI / 32, CircularArc.HALF_PI / 16); assertEquals(100, arc.getRadius(), 1e-9); assertCoordinateEquals(ORIGIN, arc.getCenter()); // linearize with a large tolerance, we should get back just the control points assertArrayEquals(arc.getControlPoints(), arc.linearize(10), 0d); }
@Test public void testMidMatchSequence() { Circle circle = new Circle(100); // create control points that will match exactly the points the algo should generate double halfStep = CircularArc.HALF_PI / 64; CircularArc arc = circle.getCircularArc(halfStep, halfStep * 2, halfStep * 5); assertEquals(100, arc.getRadius(), 1e-9); assertCoordinateEquals(ORIGIN, arc.getCenter()); // linearize, we should get back the control points, plus the regular points in the middle double[] expected = circle.samplePoints(halfStep, halfStep * 2, halfStep * 4, halfStep * 5); assertArrayEquals(expected, arc.linearize(0.2), Circle.EPS); }
@Test public void testEndMatchSequence() { Circle circle = new Circle(100); // create control points that will match exactly the points the algo should generate double halfStep = CircularArc.HALF_PI / 64; CircularArc arc = circle.getCircularArc(halfStep, halfStep * 3, halfStep * 4); assertEquals(100, arc.getRadius(), 1e-9); assertCoordinateEquals(ORIGIN, arc.getCenter()); // linearize, we should get back only control points, plus the regular points in the middle double[] expected = circle.samplePoints(halfStep, halfStep * 3, halfStep * 4); assertArrayEquals(expected, arc.linearize(10), Circle.EPS); }
@Test public void testStartMatchSequence() { Circle circle = new Circle(100); // create control points that will match exactly the points the algo should generate double halfStep = CircularArc.HALF_PI / 64; CircularArc arc = circle.getCircularArc(0, halfStep * 3, halfStep * 5); assertEquals(100, arc.getRadius(), 1e-9); assertCoordinateEquals(ORIGIN, arc.getCenter()); // linearize, we should get back the control points, plus the regular points in the middle double[] expected = circle.samplePoints(0, halfStep * 2, halfStep * 3, halfStep * 4, halfStep * 5); assertArrayEquals(expected, arc.linearize(0.2), Circle.EPS); }
@Test public void testOutsideSequence() { Circle circle = new Circle(100); // create control points that will match exactly the points the algo should generate double halfStep = CircularArc.HALF_PI / 64; CircularArc arc = circle.getCircularArc(halfStep, halfStep * 3, halfStep * 5); assertEquals(100, arc.getRadius(), 1e-9); assertCoordinateEquals(ORIGIN, arc.getCenter()); // linearize, we should get back the control points, plus the regular points in the middle double[] expected = circle.samplePoints( halfStep, halfStep * 2, halfStep * 3, halfStep * 4, halfStep * 5); assertArrayEquals(expected, arc.linearize(0.1), Circle.EPS); }
@Test public void testCollinear() { CircularArc arc = new CircularArc(0, 0, 0, 10, 0, 20); assertEquals(CircularArc.COLLINEARS, arc.getRadius(), 0d); assertCoordinateEquals(null, arc.getCenter()); double[] linearized = arc.linearize(0); assertArrayEquals(new double[] {0, 0, 0, 10, 0, 20}, linearized, 0d); assertEquals(envelopeFrom(arc), arc.getEnvelope()); }
public void testCirclePolygon() throws Exception { Parser p = new Parser(gml); Object g = p.parse(GML3CurveParsingTest.class.getResourceAsStream("v3_2/circlePolygon.xml")); assertThat(g, instanceOf(CurvePolygon.class)); CurvePolygon cp = (CurvePolygon) g; assertEquals(TOLERANCE, cp.getTolerance()); assertEquals(0, cp.getNumInteriorRing()); // exterior ring checks assertTrue(cp.getExteriorRing() instanceof CircularRing); CircularRing shell = (CircularRing) cp.getExteriorRing(); assertTrue(CurvedGeometries.isCircle(shell)); CircularArc arc = shell.getArcN(0); assertEquals(5, arc.getRadius(), 0d); assertEquals(new Coordinate(15, 150), arc.getCenter()); }
@Test public void testMinuscule() { Circle circle = new Circle(100); CircularArc arc = circle.getCircularArc(0, CircularArc.HALF_PI / 128, CircularArc.HALF_PI / 64); assertEquals(100, arc.getRadius(), 1e-9); assertCoordinateEquals(ORIGIN, arc.getCenter()); // linearize with a large tolerance, we should get back just the control points assertArrayEquals(arc.getControlPoints(), arc.linearize(10), 0d); assertEquals(envelopeFrom(arc), arc.getEnvelope()); }
@Test public void testCrossPIPI() { Circle circle = new Circle(100); // create control points that will match exactly the points the algo should generate double step = CircularArc.HALF_PI / 32; CircularArc arc = circle.getCircularArc(-step * 2, step, step * 2); assertEquals(100, arc.getRadius(), 1e-9); assertCoordinateEquals(ORIGIN, arc.getCenter()); // linearize, we should get back the control points, plus the regular points in the middle double[] expected = circle.samplePoints(-step * 2, -step, 0, step, step * 2); assertArrayEquals(expected, arc.linearize(0.2), Circle.EPS); assertEquals(envelopeFrom(arc, 100, 0), arc.getEnvelope()); }
@Test public void testSamePoints() { CircularArc arc = new CircularArc(0, 0, 0, 0, 0, 0); assertEquals(0, arc.getRadius(), 0d); assertCoordinateEquals(ORIGIN, arc.getCenter()); double[] linearized = arc.linearize(0); assertArrayEquals(new double[] {0, 0, 0, 0, 0, 0}, linearized, 0d); assertEquals(envelopeFrom(arc), arc.getEnvelope()); assertEquals(0, arc.getEnvelope().getArea(), 0d); }
@Test public void testOutsideSequenceClockwise() { Circle circle = new Circle(100); // create control points that will match exactly the points the algo should generate double halfStep = CircularArc.HALF_PI / 64; CircularArc arc = circle.getCircularArc(halfStep * 5, halfStep * 3, halfStep); assertEquals(100, arc.getRadius(), 1e-9); assertCoordinateEquals(ORIGIN, arc.getCenter()); // linearize, we should get back the control points, plus the regular points in the middle double[] expected = circle.samplePoints( halfStep * 5, halfStep * 4, halfStep * 3, halfStep * 2, halfStep); assertArrayEquals(expected, arc.linearize(0.1), Circle.EPS); assertEquals(envelopeFrom(arc), arc.getEnvelope()); }
CircularArc arc = hole.getArcN(0); assertEquals(5, arc.getRadius(), 0d); assertEquals(new Coordinate(15, 17), arc.getCenter());
@Test public void testInsertCurvePolygon() throws Exception { String xml = IOUtils.toString(getClass().getResourceAsStream("insertCurvePolygon.xml")); Document dom = postAsDOM("wfs", xml); // print(dom); checkSuccesfulTransaction(dom, 1, 0, 0); SimpleFeature first = getSingleFeature(CURVEPOLYGONS, "Circle2"); Geometry g = (Geometry) first.getDefaultGeometry(); assertNotNull(g); assertTrue(g instanceof Polygon); Polygon p = (Polygon) g; assertEquals(0, p.getNumInteriorRing()); // exterior ring checks assertTrue(p.getExteriorRing() instanceof CircularRing); CircularRing shell = (CircularRing) p.getExteriorRing(); assertTrue(CurvedGeometries.isCircle(shell)); CircularArc arc = shell.getArcN(0); assertEquals(5, arc.getRadius(), 0d); assertEquals(new Coordinate(15, 50), arc.getCenter()); }