@SuppressWarnings("unchecked") private static Geometry fixOrientation( MultiGeometry<?> geom, ICRS defaultCrs ) { ICRS crs = geom.getCoordinateSystem(); if ( crs == null ) { crs = defaultCrs; } List fixedMembers = new ArrayList<Object>( geom.size() ); for ( Geometry member : geom ) { Geometry fixedMember = fixOrientation( member, crs ); fixedMembers.add( fixedMember ); } switch ( geom.getMultiGeometryType() ) { case MULTI_GEOMETRY: return new DefaultMultiGeometry<Geometry>( null, crs, null, (List<Geometry>) fixedMembers ); case MULTI_POLYGON: return new DefaultMultiPolygon( null, crs, null, (List<Polygon>) fixedMembers ); case MULTI_SURFACE: return new DefaultMultiSurface( null, crs, null, (List<Surface>) fixedMembers ); default: throw new UnsupportedOperationException(); } }
linearizedMembers.add( curveLinearizer.linearize( curve, crit ) ); linearized = (T) geomFac.createMultiCurve( geom.getId(), geom.getCoordinateSystem(), linearizedMembers ); } else if ( geom instanceof MultiPolygon ) { MultiPolygon mp = (MultiPolygon) geom; linearizedMembers.add( sfLinearizer.linearize( polygon, crit ) ); linearized = (T) geomFac.createMultiPolygon( geom.getId(), geom.getCoordinateSystem(), linearizedMembers ); } else if ( geom instanceof MultiSurface ) { MultiSurface<Surface> ms = (MultiSurface<Surface>) geom; linearizedMembers.add( sfLinearizer.linearize( polygon, crit ) ); linearized = (T) geomFac.createMultiSurface( geom.getId(), geom.getCoordinateSystem(), linearizedMembers ); } else { List<Geometry> linearizedMembers = new ArrayList<Geometry>( geom.size() ); linearizedMembers.add( linearize( (Geometry) member, crit ) ); linearized = (T) geomFac.createMultiGeometry( geom.getId(), geom.getCoordinateSystem(), linearizedMembers );
homogenized = new GeometryFactory().createMultiPoint( geometry.getId(), geometry.getCoordinateSystem(), Collections.EMPTY_LIST ); break; homogenized = new GeometryFactory().createMultiPoint( geometry.getId(), geometry.getCoordinateSystem(), (List<Point>) deepMembers ); break; geometry.getCoordinateSystem(), (List<LineString>) deepMembers ); break; homogenized = new GeometryFactory().createMultiPolygon( geometry.getId(), geometry.getCoordinateSystem(), (List<Polygon>) deepMembers ); break;
simplifiedMembers.add( simplify( member ) ); simplified = geomFac.createMultiGeometry( mg.getId(), mg.getCoordinateSystem(), simplifiedMembers ); break;