/** * Returns a fixed version of the given {@link Ring} object. * * @param ring * ring to be repaired * @return repaired ring, never <code>null</code> */ public static Ring fixUnclosedRing( Ring ring ) { Ring repaired = null; switch ( ring.getRingType() ) { case LinearRing: { LinearRing linearRing = (LinearRing) ring; Points fixedPoints = getFixedPoints( linearRing.getControlPoints(), linearRing.getStartPoint() ); repaired = new DefaultLinearRing( ring.getId(), ring.getCoordinateSystem(), ring.getPrecision(), fixedPoints ); break; } case Ring: { List<Curve> repairedCurves = new ArrayList<Curve>( ring.getMembers() ); Curve lastCurve = repairedCurves.get( repairedCurves.size() - 1 ); repairedCurves.set( repairedCurves.size() - 1, fixCurve( lastCurve, ring.getStartPoint() ) ); repaired = new DefaultRing( ring.getId(), ring.getCoordinateSystem(), ring.getPrecision(), repairedCurves ); break; } } repaired.setProperties( ring.getProperties() ); return repaired; }
public static Ring invertOrientation( Ring ring ) { Ring fixedRing = null; switch ( ring.getRingType() ) { case LinearRing: { LinearRing linearRing = (LinearRing) ring; fixedRing = new DefaultLinearRing( ring.getId(), ring.getCoordinateSystem(), ring.getPrecision(), invertOrientation( linearRing.getControlPoints() ) ); break; } case Ring: { List<Curve> fixedMemberCurves = new ArrayList<Curve>( ring.getMembers().size() ); for ( Curve memberCurve : ring.getMembers() ) { fixedMemberCurves.add( invertOrientation( memberCurve ) ); } fixedRing = new DefaultRing( ring.getId(), ring.getCoordinateSystem(), ring.getPrecision(), fixedMemberCurves ); break; } } fixedRing.setProperties( ring.getProperties() ); return fixedRing; }