/** * * @param id * @param level * @param raster */ public MyTile( int id, int level, SimpleRaster raster ) { super( id, level, raster.getEnvelope(), null, null, (float) raster.getRasterReference().getResolutionX(), (float) raster.getRasterReference().getResolutionY(), raster.getRasterReference().getOriginLocation() ); this.raster = raster; }
@Override public SimpleRaster getSubRaster( Envelope envelope, BandType[] bands, OriginLocation targetLocation ) { // rb: testing for envelope equality can lead to a memory leak, because the memory can not be freed. RasterRect rasterRect = getRasterReference().convertEnvelopeToRasterCRS( envelope ); RasterGeoReference rasterReference = getRasterReference().createRelocatedReference( targetLocation, envelope ); // RasterData view = getReadOnlyRasterData().getSubset( rasterRect, bands ); // rb: don't need to get a readonly raster data, because it will be filled with data later. RasterData view = getRasterData().getSubset( rasterRect, bands ); return new SimpleRaster( view, envelope, rasterReference, metadata ); }
new RasterRect( 0, 0, outWidth, outHeight ), null ); Envelope envelope = currentRaster.getRasterReference().getEnvelope( new RasterRect( size2, size2, outWidth, outHeight ), null ); RasterGeoReference rasterReference = currentRaster.getRasterReference().createRelocatedReference( envelope );
@Override public void setSubRaster( Envelope env, int dstBand, AbstractRaster source ) { // calculate position in RasterData RasterRect rect = getRasterReference().convertEnvelopeToRasterCRS( env ); getRasterData().setSubset( rect.x, rect.y, dstBand, 0, source.getAsSimpleRaster().getReadOnlyRasterData() ); }
@Override public void setSubRaster( double x, double y, int dstBand, AbstractRaster source ) { // calculate position in RasterData int offset[] = getRasterReference().getRasterCoordinate( x, y ); getRasterData().setSubset( offset[0], offset[1], dstBand, 0, source.getAsSimpleRaster().getReadOnlyRasterData() ); }
@Override public void setSubRaster( Envelope env, AbstractRaster source ) { RasterRect rect = getRasterReference().convertEnvelopeToRasterCRS( env ); SimpleRaster src = source.getSubRaster( env ).getAsSimpleRaster(); // source.getSubset( env ) already returns a copy, no need for getReadOnlyRasterData getRasterData().setSubset( rect.x, rect.y, rect.width, rect.height, src.getRasterData() ); }
@Override public void setSubRaster( double x, double y, AbstractRaster source ) { // calculate position in RasterData int offset[] = getRasterReference().getRasterCoordinate( x, y ); RasterData sourceRD = source.getAsSimpleRaster().getReadOnlyRasterData(); getRasterData().setSubset( offset[0], offset[1], sourceRD.getColumns(), sourceRD.getRows(), sourceRD ); }
/** * Creates a SimpleRaster with same size, DataType and InterleaveType * * @param bands * number of bands * @return new empty SimpleRaster */ public SimpleRaster createCompatibleSimpleRaster( BandType[] bands ) { RasterData data = this.getRasterData(); RasterData newRaster = data.createCompatibleWritableRasterData( new RasterRect( 0, 0, getColumns(), getRows() ), bands ); return new SimpleRaster( newRaster, getEnvelope(), getRasterReference(), metadata ); }
/** * Returns a single band of the raster. * * @param band * Number of the selected band. * @return A copy of the selected band. */ public SimpleRaster getBand( int band ) { return new SimpleRaster( getRasterData().getSubset( new RasterRect( 0, 0, getColumns(), getRows() ), new BandType[] {} ), getEnvelope(), getRasterReference(), metadata ); }
/** * Creates a new empty writable SimpleRaster with same size, DataType and InterleaveType. * * @return new empty SimpleRaster */ public SimpleRaster createCompatibleSimpleRaster() { int height = this.getRows(); int width = this.getColumns(); RasterData data = this.getRasterData(); BandType[] bands = data.getDataInfo().bandInfo; RasterData newRaster = data.createCompatibleWritableRasterData( new RasterRect( 0, 0, width, height ), bands ); return new SimpleRaster( newRaster, this.getEnvelope(), this.getRasterReference(), metadata ); }
private void setSubsetWithAlphaHack( SimpleRaster target, AbstractRaster source ) { if ( target != null && source != null ) { // rb: todo the intersection of two envelopes should be an envelope, but the cast will be wrong. Envelope tEnv = target.getEnvelope(); Envelope sEnv = source.getEnvelope(); if ( tEnv != null && sEnv != null ) { Geometry geom = tEnv.getIntersection( sEnv ); if ( geom != null ) { Envelope intersectEnv = geom.getEnvelope(); if ( intersectEnv != null ) { RasterRect rect = target.getRasterReference().convertEnvelopeToRasterCRS( intersectEnv ); SimpleRaster src = source.getSubRaster( intersectEnv ).getAsSimpleRaster(); PixelInterleavedRasterData targetData = (PixelInterleavedRasterData) target.getRasterData(); setSubset( targetData, rect.x, rect.y, rect.width, rect.height, src.getRasterData() ); } } } } else { LOG.debug( "Ignoring rasters because of null reference." ); } }
SimpleRaster simpleRaster = raster.getAsSimpleRaster(); RasterGeoReference rasterReference = simpleRaster.getRasterReference().createRelocatedReference( OriginLocation.OUTER ); String newLine = System.getProperty( "line.separator" ); writer.write( "ncols " + simpleRaster.getColumns() + newLine );
SimpleRaster simpleRaster = raster.getAsSimpleRaster(); RasterGeoReference rasterReference = simpleRaster.getRasterReference().createRelocatedReference( OriginLocation.CENTER );
/** * Interpolates the given raster to retrieve a raster with the given width and height. * * @param sourceRaster * the raster to get an interpolation version from * @param dstWidth * the width (columns) of the resulting raster * @param dstHeight * the height (rows) of the resulting raster * @return the interpolated raster */ public AbstractRaster interPolate( AbstractRaster sourceRaster, int dstWidth, int dstHeight ) { SimpleRaster simpleSourceRaster = sourceRaster.getAsSimpleRaster(); RasterData srcData = simpleSourceRaster.getReadOnlyRasterData(); RasterGeoReference srcREnv = simpleSourceRaster.getRasterReference(); // interpolation is needed. Interpolation interpolation = InterpolationFactory.getInterpolation( interpolationType, srcData ); RasterRect rr = new RasterRect( 0, 0, dstWidth, dstHeight ); RasterData dstData = srcData.createCompatibleWritableRasterData( rr, null ); RasterGeoReference dstREnv = RasterGeoReference.create( sourceRaster.getRasterReference().getOriginLocation(), sourceRaster.getEnvelope(), dstWidth, dstHeight ); // use warp to calculate the correct sample positions in the source raster. // the warp is a cubic polynomial function created of 100 points in the dstEnvelope. This function will map // points from the source crs to the target crs very accurate. WarpPolynomial warp = createWarp( dstWidth, dstHeight, srcREnv, dstREnv ); warpTransform( warp, interpolation, dstData ); return new SimpleRaster( dstData, sourceRaster.getEnvelope(), dstREnv, (ResourceMetadata) sourceRaster.getMetadata() ); }
RasterGeoReference srcREnv = simpleSourceRaster.getRasterReference();