@Override public Point getPoint1() { return exterior.getControlPoints().get( 0 ); }
/** * Writes a linearRing. * * @param geometry * @param writer * @throws IOException */ public void writeLinearRing( LinearRing geometry, Writer writer ) throws IOException { if ( flags.contains( WKTFlag.USE_DKT ) ) { writer.append( "LINEARRING " ); appendObjectProps( writer, geometry ); LineString ls = new DefaultLineString( geometry.getId(), geometry.getCoordinateSystem(), geometry.getPrecision(), geometry.getControlPoints() ); writer.append( '(' ); writeLineStringWithoutPrefix( ls, writer ); writer.append( ')' ); } else if ( flags.contains( WKTFlag.USE_LINEARRING ) ) { writer.append( "LINEARRING " ); LineString ls = new DefaultLineString( geometry.getId(), geometry.getCoordinateSystem(), geometry.getPrecision(), geometry.getControlPoints() ); writer.append( '(' ); writeLineStringWithoutPrefix( ls, writer ); writer.append( ')' ); } else { LineString ls = new DefaultLineString( geometry.getId(), geometry.getCoordinateSystem(), geometry.getPrecision(), geometry.getControlPoints() ); writeLineString( ls, writer ); } }
/** * 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; }
int dim = linearRing.getCoordinateDimension(); export( linearRing.getControlPoints(), dim ); writer.writeEndElement(); break;
linearRing.setType( type ); linearRing.setProperties( props );
case LinearRing: { LinearRing linearRing = (LinearRing) ring; Points fixedPoints = getFixedPoints( linearRing.getControlPoints(), linearRing.getStartPoint() ); fixedCurve = new DefaultLinearRing( ring.getId(), ring.getCoordinateSystem(), ring.getPrecision(), fixedPoints );
@Override public Point getPoint2() { return exterior.getControlPoints().get( 1 ); }
@Override public Point getPoint2() { return exterior.getControlPoints().get( 1 ); }
/** * Creates a new {@link DefaultTriangle} instance from the given parameters. * * @param exterior * ring that contains exactly four planar points, the first and last point must be identical */ public DefaultTriangle( LinearRing exterior ) { if ( exterior.getControlPoints().size() != 4 ) { String msg = "The exterior ring of a triangle must contain exactly four points."; throw new IllegalArgumentException( msg ); } this.exterior = exterior; }
/** * Creates a new {@link DefaultRectangle} instance from the given parameters. * * @param exterior * ring that contains exactly five planar points, the first and last point must be identical */ public DefaultRectangle( LinearRing exterior ) { if ( exterior.getControlPoints().size() != 5 ) { String msg = "The exterior ring of a rectangle must contain exactly five points."; throw new IllegalArgumentException( msg ); } this.exterior = exterior; }
@Override public Point getPoint3() { return exterior.getControlPoints().get( 2 ); }
@Override public Point getPoint4() { return exterior.getControlPoints().get( 3 ); }
@Override public Point getPoint1() { return exterior.getControlPoints().get( 0 ); }
@Override public Point getPoint3() { return exterior.getControlPoints().get( 2 ); }
private static boolean isCCW( LinearRing c ) { Points ps = c.getControlPoints(); Coordinate[] cs = new Coordinate[ps.size()]; int i = 0; for ( Point p : ps ) { cs[i++] = new Coordinate( p.get0(), p.get1() ); } return CGAlgorithms.isCCW( cs ); }
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; }
if ( exteriorRing.getControlPoints().size() != 5 ) { String msg = "Error in 'gml:Rectangle' element. Exterior ring must contain exactly five points, but contains " + exteriorRing.getControlPoints().size(); throw new XMLParsingException( xmlStream, msg );
if ( exteriorRing.getControlPoints().size() != 4 ) { String msg = "Error in 'gml:Triangle' element. Exterior ring must contain exactly four points, but contains " + exteriorRing.getControlPoints().size(); throw new XMLParsingException( xmlStream, msg );