/** * @param coverage * @param tileProviders */ private void getTileProviders( MultiResolutionRaster coverage, List<TextureTileProvider> tileProviders ) { for ( double res : coverage.getResolutions() ) { AbstractRaster raster = coverage.getRaster( res ); addTileProvider( raster, tileProviders ); } }
/** * @param resolutionDirectories * locating the different resolutions * @param recursive * if the sub directories of the resolution directories should be scanned as well * @param options * containing values for the loading of the raster data. * @return a {@link MultiResolutionRaster} filled with {@link TiledRaster}s */ private MultiResolutionRaster buildMultiResolutionRaster( List<File> resolutionDirectories, boolean recursive, RasterIOOptions options ) { MultiResolutionRaster mrr = new MultiResolutionRaster( metadata ); for ( File resDir : resolutionDirectories ) { if ( resDir != null && resDir.isDirectory() ) { AbstractRaster rasterLevel = buildTiledRaster( resDir, recursive, options ); if ( rasterLevel != null ) { mrr.addRaster( rasterLevel ); } } } return mrr; }
/** * Returns a subset of the raster for a given resolution. * * The matching raster is selected using {@link #getRaster(double)}. * * @see #getRaster(double) * * @param envelope * envelope of the subset * @param resolution * resolution in world units per pixel * @return subset of the best-fitting raster */ public AbstractRaster getSubset( Envelope envelope, double resolution ) { AbstractRaster raster = getRaster( resolution ); return raster.getSubRaster( envelope ); }
/** * @param mrrConfig * @param adapter * @return a corresponding raster */ private MultiResolutionRaster fromJAXB( MultiResolutionRasterConfig mrrConfig, ICRS parentCrs ) { if ( mrrConfig != null ) { String defCRS = mrrConfig.getStorageCRS(); ICRS crs = null; if ( defCRS != null ) { crs = CRSManager.getCRSRef( defCRS ); } if ( crs == null ) { LOG.debug( "Using parent crs." ); crs = parentCrs; } RasterIOOptions options = getOptions( mrrConfig, parentCrs ); MultiResolutionRaster mrr = new MultiResolutionRaster( metadata ); mrr.setCoordinateSystem( crs ); for ( Resolution resolution : mrrConfig.getResolution() ) { if ( resolution != null ) { AbstractRaster rasterLevel = fromJAXB( resolution, options, crs, mrrConfig.getNodata() ); mrr.addRaster( rasterLevel ); } } return mrr; } throw new ResourceInitException( "The configured multi resolution raster may not be null." ); }
/** * @param topLevelResolutionDir * @param recursive * @param options * containing information about the loaded raster. * */ public MultiResolutionTileGrid( java.io.File topLevelResolutionDir, boolean recursive, RasterIOOptions options ) { if ( !topLevelResolutionDir.isDirectory() ) { throw new IllegalArgumentException( "Specified dir: " + topLevelResolutionDir.getAbsolutePath() + " is not a directory." ); } mrr = new RasterBuilder().buildMultiResolutionRaster( topLevelResolutionDir, recursive, options ); rasterLevels = new RasterLevel[mrr.getResolutions().size()]; double currentMin = 0; List<Double> resolutions = mrr.getResolutions(); for ( int i = 0; i < rasterLevels.length; ++i ) { rasterLevels[i] = new RasterLevel( i, i, currentMin, resolutions.get( i ) ); currentMin = resolutions.get( i ); } }
@Override public AbstractRaster getAsRaster( Envelope spatialExtent, SampleResolution resolution, InterpolationType interpolation ) { double res = resolution.getResolution( 0 ); AbstractRaster raster = getRaster( res ); if ( raster == null ) { return resolutions.get( resolutions.size() - 1 ); } return raster.getAsRaster( spatialExtent, resolution, interpolation ); }
MultiResolutionRaster mrr = new MultiResolutionRaster( metadata ); String file = config.getPyramidFile(); ImageInputStream iis = ImageIO.createImageInputStream( metadata.getLocation().resolveToFile( file ) ); setNoDataValue( raster, config.getNodata() ); raster.setCoordinateSystem( crs ); mrr.addRaster( raster ); mrr.setCoordinateSystem( crs ); return mrr; } catch ( Exception e ) {
private WCSCoverage buildCoverage( Coverage coverage, MultiResolutionRaster mrr ) { CoverageOptions options = buildOptions( coverage.getNativeFormat(), coverage.getSupportOptions() ); RangeSet rs = RangeSetBuilder.createBandRangeSetFromRaster( "generated", "Automatically generated dataset, created from the native raster types.", mrr.getRaster( mrr.getResolutions().get( mrr.getResolutions().size() - 1 ) ) ); return new MultiResolutionCoverage( coverage.getName(), coverage.getLabel(), mrr, options, rs ); }
@Override public CoverageResult getCoverageResult( Envelope env, Grid grid, String format, String interpolation, RangeSet requestedRangeset ) throws WCServiceException { AbstractRaster rasterLevel = ( (MultiResolutionRaster) coverage ).getRaster( grid.getResolution() ); AbstractRaster result; try { result = CoverageTransform.transform( rasterLevel, env, grid, interpolation ); } catch ( TransformationException e ) { throw new RuntimeException( "error while transforming raster result: " + e.getMessage(), e ); } if ( requestedRangeset != null ) { RasterFilter filter = new RasterFilter( result ); result = filter.apply( getRangeSet(), requestedRangeset ); } return new SimpleRasterResult( result, format ); }
/** * @param resolutionDirectories * locating the different resolutions * @param recursive * if the sub directories of the resolution directories should be scanned as well * @param options * containing values for the loading of the raster data. * @return a {@link MultiResolutionRaster} filled with {@link TiledRaster}s */ private MultiResolutionRaster buildMultiResolutionRaster( List<File> resolutionDirectories, boolean recursive, RasterIOOptions options ) { MultiResolutionRaster mrr = new MultiResolutionRaster( null ); for ( File resDir : resolutionDirectories ) { if ( resDir != null && resDir.isDirectory() ) { AbstractRaster rasterLevel = buildTiledRaster( resDir, recursive, options ); if ( rasterLevel != null ) { mrr.addRaster( rasterLevel ); } } } return mrr; }
@Override public Set<TileFile> getTiles( Envelope env, double metersPerPixel ) { TiledRaster raster = (TiledRaster) mrr.getRaster( metersPerPixel ); TileContainer container = raster.getTileContainer(); List<AbstractRaster> tiles = container.getTiles( env ); Set<TileFile> result = new HashSet<TileFile>(); int level = -1; for ( Double res : mrr.getResolutions() ) { if ( metersPerPixel <= res ) { level++; } else { break; } } // make sure it will get to level 0 level = Math.max( 0, level ); for ( AbstractRaster r : tiles ) { if ( r != null ) { int id = r.hashCode(); result.add( new MyTile( id, level, r.getAsSimpleRaster() ) ); } } return result; }
@Override public CoverageLayerData mapQuery( LayerQuery query, List<String> headers ) throws OWSException { try { Envelope bbox = query.getEnvelope(); RangeSet filter = dimensionHandler.getDimensionFilter( query.getDimensions(), headers ); Style style = resolveStyleRef( query.getStyle() ); // handle SLD/SE scale settings style = style == null ? null : style.filter( query.getScale() ); Interpolation fromRequest = query.getRenderingOptions().getInterpolation( getMetadata().getName() ); InterpolationType interpol = determineInterpolation( fromRequest ); AbstractRaster raster = this.raster; if ( raster == null ) { raster = multiraster.getRaster( query.getResolution() ); } return new CoverageLayerData( raster, bbox, query.getWidth(), query.getHeight(), interpol, filter, style, getMetadata().getFeatureTypes().get( 0 ) ); } catch ( OWSException e ) { throw e; } catch ( Throwable e ) { LOG.warn( "Unable to prepare rendering of raster layer: {}", e.getLocalizedMessage() ); LOG.trace( "Stack trace:", e ); } return null; }
if ( source instanceof MultiResolutionRaster ) { MultiResolutionRaster mrr = (MultiResolutionRaster) source; List<Double> resolutions = mrr.getResolutions(); if ( resolutions != null && !resolutions.isEmpty() ) { for ( Double res : resolutions ) { AbstractRaster raster = mrr.getRaster( res ); getTiles( raster, tiles );
raster = multiraster.getRaster( query.getResolution() );