public List<? extends SurfacePatch> getPatches() { return baseSurface.getPatches(); }
private static Geometry fixOrientation( Surface geom, ICRS defaultCrs ) { if ( geom.getSurfaceType() == Polygon ) { return fixOrientation( (Polygon) geom, defaultCrs ); } throw new UnsupportedOperationException(); }
public Measure getArea( Unit requestedBaseUnit ) { return baseSurface.getArea( requestedBaseUnit ); }
void render( PointStyling styling, Surface surface ) { for ( SurfacePatch patch : surface.getPatches() ) { if ( patch instanceof PolygonPatch ) { PolygonPatch polygonPatch = (PolygonPatch) patch; for ( Curve curve : polygonPatch.getBoundaryRings() ) { curve.setCoordinateSystem( surface.getCoordinateSystem() ); renderer.render( styling, curve ); } } else { throw new IllegalArgumentException( "Cannot render non-planar surfaces." ); } } }
switch ( geometry.getSurfaceType() ) { case Polygon: { case TriangulatedSurface: { Surface linearized = linearizer.linearize( geometry, crit ); if ( linearized.getPatches().size() == 1 ) { PolygonPatch patch = (PolygonPatch) linearized.getPatches().get( 0 ); Ring exteriorRing = patch.getExteriorRing(); List<Ring> interiorRings = patch.getInteriorRings(); simplified = geomFac.createPolygon( geometry.getId(), geometry.getCoordinateSystem(), exteriorRing, interiorRings ); } else { List<Polygon> members = new ArrayList<Polygon>( linearized.getPatches().size() ); for ( SurfacePatch patch : linearized.getPatches() ) { Ring exteriorRing = ( (PolygonPatch) patch ).getExteriorRing(); List<Ring> interiorRings = ( (PolygonPatch) patch ).getInteriorRings(); members.add( geomFac.createPolygon( null, geometry.getCoordinateSystem(), exteriorRing, interiorRings ) ); simplified = geomFac.createMultiPolygon( geometry.getId(), geometry.getCoordinateSystem(), members );
List<? extends SurfacePatch> l = geometry.getPatches(); for ( SurfacePatch p : l ) { switch ( p.getSurfacePatchType() ) { case POLYGON_PATCH: counter++; writePolygonPatch( geometry.getId(), geometry.getCoordinateSystem(), geometry.getPrecision(), (PolygonPatch) p, writer ); break;
throws TransformationException { Surface result = null; SurfaceType surfaceType = surface.getSurfaceType(); String id = surface.getId(); ICRS nCRS = getTargetCRS(); switch ( surfaceType ) { break; case OrientableSurface: List<? extends SurfacePatch> osP = surface.getPatches(); List<SurfacePatch> tosP = transform( osP, trans ); Surface tOs = geomFactory.createSurface( id, tosP, nCRS ); case PolyhedralSurface: List<PolygonPatch> phsP = (List<PolygonPatch>) surface.getPatches(); List<PolygonPatch> tphsP = (List) transform( phsP, trans ); result = geomFactory.createPolyhedralSurface( id, nCRS, tphsP ); break; case Surface: List<? extends SurfacePatch> ssP = surface.getPatches(); List<SurfacePatch> tssP = transform( ssP, trans ); result = geomFactory.createSurface( id, tssP, nCRS ); List<Triangle> tsP = (List<Triangle>) surface.getPatches(); List<Triangle> ttsP = (List) transform( tsP, trans ); result = geomFactory.createTriangulatedSurface( id, nCRS, ttsP );
throws XMLStreamException, UnknownCRSException, TransformationException { switch ( surface.getSurfaceType() ) { case CompositeSurface: { exportCompositeSurface( (CompositeSurface) surface ); startGeometry( "Surface", surface ); writer.writeStartElement( gmlNs, "patches" ); for ( SurfacePatch surfacePatch : surface.getPatches() ) { exportSurfacePatch( surfacePatch );
@Override public void exportSurface( Surface surface ) throws XMLStreamException, TransformationException, UnknownCRSException { switch ( surface.getSurfaceType() ) { case Polygon: { exportPolygon( (Polygon) surface ); break; } default: { // try to export generic Surface as gml:Polygon startGeometry( "Polygon", surface ); writer.writeStartElement( "gml", "outerBoundaryIs", GML21NS ); writer.writeStartElement( "gml", "LinearRing", GML21NS ); exportCoordinates( surface.getExteriorRingCoordinates() ); writer.writeEndElement(); // </gml:LinearRing> writer.writeEndElement(); // </gml:outerBoundaryIs> List<Points> rings = surface.getInteriorRingsCoordinates(); if ( rings != null ) { for ( Points ring : rings ) { writer.writeStartElement( "gml", "innerBoundaryIs", GML21NS ); exportCoordinates( ring ); writer.writeEndElement(); // </gml:innerBoundaryIs> } } writer.writeEndElement(); // </gml:Polygon> } } }
Points points = geometry.getExteriorRingCoordinates(); int counter = 0; for ( Point point : points ) { List<Points> interiorRings = geometry.getInteriorRingsCoordinates(); if ( interiorRings != null ) { for ( Points r : interiorRings ) {
public Measure getPerimeter( Unit requestedUnit ) { return baseSurface.getPerimeter( requestedUnit ); }
/** * @param multiSurface * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void exportMultiPolygon( MultiSurface<Surface> multiSurface ) throws XMLStreamException, TransformationException, UnknownCRSException { startGeometry( "MultiPolygon", multiSurface ); for ( Surface polygon : multiSurface ) { 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 ); exportSurface( polygon ); writer.writeEndElement(); } } writer.writeEndElement(); // </gml:MultiPolygon> }
@Override public List<Points> getInteriorRingsCoordinates() { return getReferencedObject().getInteriorRingsCoordinates(); }
@Override public Points getExteriorRingCoordinates() { return getReferencedObject().getExteriorRingCoordinates(); }
public <T extends Surface> T linearize( T surface, LinearizationCriterion crit ) { T linearizedSurface = null; switch ( surface.getSurfaceType() ) { case Polygon: { Polygon polygon = (Polygon) surface; List<? extends SurfacePatch> patches = surface.getPatches(); List<PolygonPatch> linearizedPatches = new ArrayList<PolygonPatch>( patches.size() ); for ( SurfacePatch patch : surface.getPatches() ) { if ( !( patch instanceof PolygonPatch ) ) { String msg = "Linearization of non planar surface patches is not implemented"; linearizedSurface = (T) geomFac.createPolyhedralSurface( surface.getId(), surface.getCoordinateSystem(), linearizedPatches ); break; List<? extends SurfacePatch> patches = surface.getPatches(); List<SurfacePatch> linearizedPatches = new ArrayList<SurfacePatch>( patches.size() ); for ( SurfacePatch patch : surface.getPatches() ) { if ( !( patch instanceof PolygonPatch ) ) { String msg = "Linearization of non planar surface patches is not implemented"; linearizedSurface = (T) geomFac.createSurface( surface.getId(), linearizedPatches, surface.getCoordinateSystem() ); break; LOG.warn( "The surface type " + surface.getSurfaceType() + " currently cannot be linearized. It's being returned as it is." ); linearizedSurface = surface;
private void traverseSurface( Surface s ) { SurfaceType st = s.getSurfaceType(); switch ( st ) { case CompositeSurface: case Surface: case TriangulatedSurface: for ( SurfacePatch patch : s.getPatches() ) { traversePatch( patch );
void render( LineStyling styling, Surface surface ) { for ( SurfacePatch patch : surface.getPatches() ) { if ( patch instanceof PolygonPatch ) { PolygonPatch polygonPatch = (PolygonPatch) patch; for ( Curve curve : polygonPatch.getBoundaryRings() ) { if ( curve.getCoordinateSystem() == null ) { curve.setCoordinateSystem( surface.getCoordinateSystem() ); } renderer.render( styling, curve ); } } else { throw new IllegalArgumentException( "Cannot render non-planar surfaces." ); } } }
@Override public Measure getPerimeter( Unit requestedUnit ) { return getReferencedObject().getPerimeter( requestedUnit ); } }
private void exportOrientableSurface( OrientableSurface orientableSurface ) throws XMLStreamException, UnknownCRSException, TransformationException { startGeometry( "OrientableSurface", orientableSurface ); Surface baseSurface = orientableSurface.getBaseSurface(); if ( baseSurface.getId() != null && referenceExportStrategy.isObjectExported( baseSurface.getId() ) ) { writer.writeEmptyElement( gmlNs, "baseSurface" ); writer.writeAttribute( XLNNS, "href", "#" + baseSurface.getId() ); } else { referenceExportStrategy.addExportedId( baseSurface.getId() ); writer.writeStartElement( gmlNs, "baseSurface" ); exportSurface( orientableSurface.getBaseSurface() ); writer.writeEndElement(); } writer.writeEndElement(); }
@Override public List<SurfacePatch> getPatches() { List<SurfacePatch> allPatches = new LinkedList<SurfacePatch>(); for ( Surface member : memberSurfaces ) { allPatches.addAll( member.getPatches() ); } return allPatches; }