@Override public boolean isSFSCompliant() { if ( exteriorRing == null || exteriorRing.getRingType() != RingType.LinearRing ) { return false; } if ( interiorRings != null ) { for ( Ring interiorRing : interiorRings ) { if ( interiorRing.getRingType() != RingType.LinearRing ) { return false; } } } return true; }
/** * Writes a ring. * * @param geometry * @param writer * @throws IOException */ public void writeRing( Ring geometry, Writer writer ) throws IOException { switch ( geometry.getRingType() ) { case LinearRing: writeLinearRing( (LinearRing) geometry, writer ); break; case Ring: writeCurveGeometry( geometry, writer ); break; } }
private static Ring fixOrientation( Ring ring, boolean forceClockwise ) { if ( ring.getRingType() != LinearRing ) { throw new UnsupportedOperationException(); } LinearRing jtsRing = (LinearRing) ( (AbstractDefaultGeometry) ring ).getJTSGeometry(); Coordinate[] coords = jtsRing.getCoordinates(); // TODO check if inversions can be applied in any case (i.e. whether JTS has a guaranteed orientation of // intersection result polygons) boolean needsInversion = isCCW( coords ) == forceClockwise; if ( needsInversion ) { return invertOrientation( ring ); } return ring; }
throws XMLStreamException, UnknownCRSException, TransformationException { switch ( ring.getRingType() ) { case Ring: if ( GML_32 != version ) {
/** * 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; }
switch ( ring.getRingType() ) { case LinearRing: { LinearRing linearRing = (LinearRing) ring;