private static int getCurvilinearElementsCount(LineString ls) { if (ls instanceof CompoundCurvedGeometry<?>) { CompoundCurvedGeometry<?> curved = (CompoundCurvedGeometry<?>) ls; // take into account the elemInfo describing the compound return curved.getComponents().size() + 1; } else { return 1; } }
public void testCompoundClosed() throws Exception { Parser p = new Parser(gml); Object g = p.parse(GML3CurveParsingTest.class.getResourceAsStream("v3_2/compoundClosed.xml")); assertThat(g, instanceOf(CompoundCurvedGeometry.class)); CompoundCurvedGeometry<?> compound = (CompoundCurvedGeometry<?>) g; assertEquals(TOLERANCE, compound.getTolerance()); List<LineString> components = compound.getComponents(); assertEquals(2, components.size()); LineString ls = components.get(0); assertEquals(4, ls.getNumPoints()); assertEquals(new Coordinate(10, 78), ls.getCoordinateN(0)); assertEquals(new Coordinate(10, 75), ls.getCoordinateN(1)); assertEquals(new Coordinate(20, 75), ls.getCoordinateN(2)); assertEquals(new Coordinate(20, 78), ls.getCoordinateN(3)); CircularString cs = (CircularString) components.get(1); assertArrayEquals(new double[] {20, 78, 15, 80, 10, 78}, cs.getControlPoints(), 0d); }
public void testCompoundOpen() throws Exception { Parser p = new Parser(gml); Object g = p.parse(GML3CurveParsingTest.class.getResourceAsStream("v3_2/compoundOpen.xml")); assertThat(g, instanceOf(CompoundCurvedGeometry.class)); CompoundCurvedGeometry<?> compound = (CompoundCurvedGeometry<?>) g; assertEquals(TOLERANCE, compound.getTolerance()); List<LineString> components = compound.getComponents(); assertEquals(3, components.size()); LineString ls1 = components.get(0); assertEquals(2, ls1.getNumPoints()); assertEquals(new Coordinate(10, 45), ls1.getCoordinateN(0)); assertEquals(new Coordinate(20, 45), ls1.getCoordinateN(1)); CircularString cs = (CircularString) components.get(1); assertArrayEquals( new double[] {20.0, 45.0, 23.0, 48.0, 20.0, 51.0}, cs.getControlPoints(), 0d); LineString ls2 = components.get(2); assertEquals(2, ls2.getNumPoints()); assertEquals(new Coordinate(20, 51), ls2.getCoordinateN(0)); assertEquals(new Coordinate(10, 51), ls2.getCoordinateN(1)); }
public Object getProperty(Object object, QName name) throws Exception { // System.out.println(name.getLocalPart()); if ("curveMember".equals(name.getLocalPart())) { if (object instanceof CompoundCurvedGeometry<?>) { CompoundCurvedGeometry<?> curve = (CompoundCurvedGeometry<?>) object; List<LineString> components = curve.getComponents(); return components; } else { return object; } } return null; }
public Object getProperty(Object object, QName name) throws Exception { if ("segments".equals(name.getLocalPart())) { if (object instanceof CompoundCurvedGeometry<?>) { CompoundCurvedGeometry<?> curve = (CompoundCurvedGeometry<?>) object; List<LineString> components = curve.getComponents(); return components; } else { return object; } } else { super.getProperty(object, name); } return null; }
private void appendCompoundCurveTaggedText( CompoundCurvedGeometry<LineString> multiLineString, int level, Writer writer) throws IOException { writer.write("COMPOUNDCURVE "); if (((Geometry) multiLineString).isEmpty()) { writer.write("EMPTY"); } else { int level2 = level; boolean doIndent = false; writer.write("("); List<LineString> components = multiLineString.getComponents(); for (int i = 0; i < components.size(); i++) { if (i > 0) { writer.write(", "); level2 = level + 1; doIndent = true; } LineString component = components.get(i); appendPotentialCurveText(component, level2, doIndent, writer); } writer.write(")"); } }
private void encodeContents(LineString geometry, GMLWriter handler) throws Exception { if (geometry instanceof SingleCurvedGeometry) { SingleCurvedGeometry curve = (SingleCurvedGeometry) geometry; encodeCurve(curve, handler); } else if (geometry instanceof CompoundCurvedGeometry) { CompoundCurvedGeometry<LineString> compound = (CompoundCurvedGeometry) geometry; for (LineString component : compound.getComponents()) { encodeContents(component, handler); } } else { encodeLinestring(geometry, handler); } }
private static final Geometry cloneGeometry(LineString geom, int dimension) { if (geom instanceof SingleCurvedGeometry<?>) { SingleCurvedGeometry<?> curved = (SingleCurvedGeometry<?>) geom; double[] controlPoints = curved.getControlPoints(); double[] clonedPoints = new double[controlPoints.length]; System.arraycopy(controlPoints, 0, clonedPoints, 0, controlPoints.length); return new CircularString(clonedPoints, geomFac, curved.getTolerance()); } else if (geom instanceof CompoundCurvedGeometry<?>) { CompoundCurvedGeometry<?> curved = (CompoundCurvedGeometry<?>) geom; List<LineString> components = curved.getComponents(); List<LineString> clonedComponents = new ArrayList<>(components.size()); for (LineString ls : components) { LineString cloned = (LineString) cloneGeometry(ls, dimension); clonedComponents.add(cloned); } return new CompoundCurve(clonedComponents, geomFac, dimension); } else { return geomFac.createLineString( new LiteCoordinateSequence(geom.getCoordinateSequence(), dimension)); } }
private static final Geometry cloneGeometry(LinearRing geom, int dimension) { if (geom instanceof SingleCurvedGeometry<?>) { SingleCurvedGeometry<?> curved = (SingleCurvedGeometry<?>) geom; double[] controlPoints = curved.getControlPoints(); double[] clonedPoints = new double[controlPoints.length]; System.arraycopy(controlPoints, 0, clonedPoints, 0, controlPoints.length); return new CircularRing(clonedPoints, geomFac, curved.getTolerance()); } else if (geom instanceof CompoundCurvedGeometry<?>) { CompoundCurvedGeometry<?> curved = (CompoundCurvedGeometry<?>) geom; List<LineString> components = curved.getComponents(); List<LineString> clonedComponents = new ArrayList<>(components.size()); for (LineString ls : components) { LineString cloned = (LineString) cloneGeometry(ls, dimension); clonedComponents.add(cloned); } return new CompoundRing(clonedComponents, geomFac, dimension); } else { return geomFac.createLinearRing( new LiteCoordinateSequence(geom.getCoordinateSequence(), dimension)); } }
private LineString transformCurvedLineString(CurvedGeometry<?> curved, GeometryFactory gf) throws TransformException { CurvedGeometryFactory cf = CurvedGeometries.getFactory(curved); if (curved instanceof SingleCurvedGeometry<?>) { SingleCurvedGeometry<?> single = (SingleCurvedGeometry<?>) curved; double[] controlPoints = single.getControlPoints(); double[] target = new double[controlPoints.length]; transform.transform(controlPoints, 0, target, 0, controlPoints.length / 2); return cf.createCurvedGeometry(2, target); } else { CompoundCurvedGeometry<?> compound = (CompoundCurvedGeometry<?>) curved; List<LineString> reprojected = new ArrayList<>(); for (LineString component : compound.getComponents()) { LineString ls = transformLineString(component, gf); reprojected.add(ls); } return cf.createCurvedGeometry(reprojected); } }
public void testMultiSurface() throws Exception { Parser p = new Parser(gml); Object g = p.parse(GML3CurveParsingTest.class.getResourceAsStream("v3_2/multiSurface2.xml")); assertThat(g, instanceOf(org.geotools.geometry.jts.MultiSurface.class)); org.geotools.geometry.jts.MultiSurface mp = (org.geotools.geometry.jts.MultiSurface) g; assertEquals(TOLERANCE, mp.getTolerance()); assertEquals(2, mp.getNumGeometries()); CurvePolygon p1 = (CurvePolygon) mp.getGeometryN(0); assertTrue(p1.getExteriorRing() instanceof CompoundCurvedGeometry<?>); assertEquals(2, ((CompoundCurvedGeometry<?>) p1.getExteriorRing()).getComponents().size()); assertEquals(1, p1.getNumInteriorRing()); assertEquals( 2, ((CompoundCurvedGeometry<?>) p1.getInteriorRingN(0)).getComponents().size()); CurvePolygon p2 = (CurvePolygon) mp.getGeometryN(1); assertTrue(p2.getExteriorRing() instanceof CompoundCurvedGeometry<?>); assertEquals(2, ((CompoundCurvedGeometry<?>) p2.getExteriorRing()).getComponents().size()); assertEquals(0, p2.getNumInteriorRing()); }
public void testCompoundPolygon() throws Exception { Parser p = new Parser(gml); Object g = p.parse(GML3CurveParsingTest.class.getResourceAsStream("v3_2/compoundPolygon.xml")); assertThat(g, instanceOf(CurvePolygon.class)); CurvePolygon cp = (CurvePolygon) g; assertEquals(TOLERANCE, cp.getTolerance()); assertEquals(0, cp.getNumInteriorRing()); assertTrue(cp.getExteriorRing() instanceof CompoundCurvedGeometry<?>); CompoundCurvedGeometry<?> compound = (CompoundCurvedGeometry<?>) cp.getExteriorRing(); List<LineString> components = compound.getComponents(); assertEquals(2, components.size()); LineString ls = components.get(0); assertEquals(3, ls.getNumPoints()); assertEquals(new Coordinate(6, 10), ls.getCoordinateN(0)); assertEquals(new Coordinate(10, 1), ls.getCoordinateN(1)); assertEquals(new Coordinate(14, 10), ls.getCoordinateN(2)); CircularString cs = (CircularString) components.get(1); assertArrayEquals(new double[] {14, 10, 10, 14, 6, 10}, cs.getControlPoints(), 0d); }
List<LineString> components = shell.getComponents(); assertEquals(2, components.size());
@Test public void testUpdateCompoundCurve() throws Exception { String xml = IOUtils.toString(getClass().getResourceAsStream("updateCompoundCurve.xml")); Document dom = postAsDOM("wfs", xml); // print(dom); checkSuccesfulTransaction(dom, 0, 1, 0); SimpleFeature first = getSingleFeature(CURVELINES, "Compound"); Geometry g = (Geometry) first.getDefaultGeometry(); assertNotNull(g); assertTrue(g instanceof CompoundCurvedGeometry<?>); CompoundCurvedGeometry<?> compound = (CompoundCurvedGeometry<?>) g; List<LineString> components = compound.getComponents(); assertEquals(3, components.size()); LineString ls1 = components.get(0); assertEquals(2, ls1.getNumPoints()); assertEquals(new Coordinate(10, 45), ls1.getCoordinateN(0)); assertEquals(new Coordinate(20, 45), ls1.getCoordinateN(1)); CircularString cs = (CircularString) components.get(1); assertArrayEquals( new double[] {20.0, 45.0, 23.0, 48.0, 20.0, 51.0}, cs.getControlPoints(), 0d); LineString ls2 = components.get(2); assertEquals(2, ls2.getNumPoints()); assertEquals(new Coordinate(20, 51), ls2.getCoordinateN(0)); assertEquals(new Coordinate(10, 51), ls2.getCoordinateN(1)); }