private static Geometry fixOrientation( Polygon geom, ICRS defaultCrs ) { ICRS crs = geom.getCoordinateSystem(); if ( crs == null ) { crs = defaultCrs; } Ring exteriorRing = fixOrientation( geom.getExteriorRing(), false ); List<Ring> interiorRings = fixInteriorOrientation( geom.getInteriorRings(), crs ); return new DefaultPolygon( null, crs, null, exteriorRing, interiorRings ); }
private Polygon transform( Polygon polygon, Transformation trans ) throws TransformationException { Ring exterior = polygon.getExteriorRing(); LinearRing tExteriorRing = transform( exterior, trans ); List<Ring> interiorRings = polygon.getInteriorRings(); List<Ring> tInteriorRings = new ArrayList<Ring>( interiorRings == null ? 0 : interiorRings.size() ); if ( interiorRings != null && !interiorRings.isEmpty() ) { for ( Ring interior : interiorRings ) { if ( interior != null ) { tInteriorRings.add( transform( interior, trans ) ); } } } return geomFactory.createPolygon( polygon.getId(), getTargetCRS(), tExteriorRing, tInteriorRings ); }
@Override public List<PolygonPatch> getPatches() { return getReferencedObject().getPatches(); } }
Ring outerRing = polygon.getExteriorRing(); if ( outerRing.getId() != null && referenceExportStrategy.isObjectExported( outerRing.getId() ) ) { writer.writeEmptyElement( "gml", "outerBoundaryIs", GML21NS ); List<Ring> rings = polygon.getInteriorRings(); if ( rings != null ) { for ( Ring ring : rings ) {
case Polygon: { Polygon polygon = (Polygon) surface; Ring exteriorRing = polygon.getExteriorRing(); Ring linearizedExteriorRing = (Ring) curveLinearizer.linearize( exteriorRing, crit ); List<Ring> interiorRings = polygon.getInteriorRings(); List<Ring> linearizedInteriorRings = new ArrayList<Ring>( interiorRings.size() ); for ( Ring interiorRing : interiorRings ) { linearizedInteriorRings.add( (Ring) curveLinearizer.linearize( interiorRing, crit ) ); linearizedSurface = (T) geomFac.createPolygon( polygon.getId(), polygon.getCoordinateSystem(), linearizedExteriorRing, linearizedInteriorRings ); break;
@Override public Ring getExteriorRing() { return getReferencedObject().getExteriorRing(); }
@Override public List<Ring> getInteriorRings() { return getReferencedObject().getInteriorRings(); }
/** * @param multiPolygon * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void exportMultiPolygon( MultiPolygon multiPolygon ) throws XMLStreamException, TransformationException, UnknownCRSException { startGeometry( "MultiPolygon", multiPolygon ); for ( Polygon polygon : multiPolygon ) { if ( polygon.getId() != null && referenceExportStrategy.isObjectExported( polygon.getId() ) ) { writer.writeEmptyElement( "gml", "polygonMember", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + polygon.getId() ); } else { writer.writeStartElement( "gml", "polygonMember", GML21NS ); exportPolygon( polygon ); writer.writeEndElement(); } } writer.writeEndElement(); // </gml:MultiPolygon> }
polygon.setType( type ); polygon.setProperties( props );
Polygon outerP = fac.createPolygon( null, crs, outer, null ); Polygon innerP = fac.createPolygon( null, crs, ring, null ); if ( outerP.contains( innerP ) ) { inners.add( ring ); } else { if ( inners.isEmpty() && innerP.contains( outerP ) ) { LOG.warn( "Reordering rings of polygon..." ); inners.add( outer );
private void exportPolygon( Polygon polygon ) throws XMLStreamException, UnknownCRSException, TransformationException { startGeometry( "Polygon", polygon ); Ring exteriorRing = polygon.getExteriorRing(); if ( exteriorRing.getId() != null && referenceExportStrategy.isObjectExported( exteriorRing.getId() ) ) { writer.writeEmptyElement( gmlNs, "exterior" ); writer.writeAttribute( XLNNS, "href", "#" + exteriorRing.getId() ); } else { referenceExportStrategy.addExportedId( exteriorRing.getId() ); writer.writeStartElement( gmlNs, "exterior" ); exportRing( exteriorRing ); writer.writeEndElement(); } if ( polygon.getInteriorRings() != null ) { for ( Ring ring : polygon.getInteriorRings() ) { if ( ring.getId() != null && referenceExportStrategy.isObjectExported( ring.getId() ) ) { writer.writeEmptyElement( gmlNs, "interior" ); writer.writeAttribute( XLNNS, "href", "#" + ring.getId() ); } else { referenceExportStrategy.addExportedId( ring.getId() ); writer.writeStartElement( gmlNs, "interior" ); exportRing( ring ); writer.writeEndElement(); } } } exportAdditionalProps( polygon ); writer.writeEndElement(); }
case Polygon: Polygon p = (Polygon) s; if ( p.getExteriorRing() != null ) { traverse( p.getExteriorRing() ); for ( Ring inner : p.getInteriorRings() ) { traverse( inner );
GeometryFactory geomFac = new GeometryFactory(); List<SurfacePatch> patches = new ArrayList<SurfacePatch>(); patches.add( geomFac.createPolygonPatch( p.getExteriorRing(), p.getInteriorRings() ) ); geom = geomFac.createSurface( geom.getId(), patches, geom.getCoordinateSystem() ); } else if ( hierarchy.getCurveSubstitutions().contains( particle.getName() ) && geom instanceof LineString ) {