out.writeObject( createEnvelope( envelope ) ); out.writeObject( rasterDataInfo ); out.writeObject( rasterGeoReference.getOriginLocation() ); out.writeDouble( rasterGeoReference.getResolutionX() ); out.writeDouble( rasterGeoReference.getResolutionY() );
/** * * @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; }
/** * * see http://www.remotesensing.org/geotiff/spec/geotiff2.4.html#2.4 especially the KeyEntry part. * * The key (Integer) is the GeoTIFF Key ID http://www.remotesensing.org/geotiff/spec/geotiff6.html#6.2 The value is * an int array of the size 3. If you want to store simple GeoTIFF key-values set the array to { 0, 1, VALUE }. * * @return a Tifffield containing the geo directory, which contains keys for the crs description and the raster * type. */ private static TIFFField createDirectoryTag( RasterGeoReference geoRef ) { Map<Integer, char[]> geoKeyDirectoryTag = new HashMap<Integer, char[]>(); addCRS( geoKeyDirectoryTag, geoRef.getCrs() ); addGTRasterTypeGeoKey( geoKeyDirectoryTag, geoRef.getOriginLocation() ); // space for the header and the keys. char[] geoKeys = extractGeoKeys( geoKeyDirectoryTag ); if ( geoKeys.length > 4 ) { TIFFTag tag = GEO_TAG_SET.getTag( GeoTIFFTagSet.TAG_GEO_KEY_DIRECTORY ); return new TIFFField( tag, TIFFTag.TIFF_SHORT, geoKeys.length, geoKeys ); } return null; }
RasterGeoReference nGeoRef = resolution.createGeoReference( getRasterReference().getOriginLocation(), spatialExtent ); RasterRect rect = nGeoRef.convertEnvelopeToRasterCRS( spatialExtent ); GeometryTransformer gt = new GeometryTransformer( getCoordinateSystem() ); Envelope inLocalCRS = gt.transform( spatialExtent ).getEnvelope(); RasterGeoReference nGeoRef = resolution.createGeoReference( getRasterReference().getOriginLocation(), inLocalCRS ); rect = nGeoRef.convertEnvelopeToRasterCRS( inLocalCRS );
double resx = cols * ref.getResolutionX() / ( cols - 2 ); double resy = rows * ref.getResolutionY() / ( rows - 2 ); ref = new RasterGeoReference( ref.getOriginLocation(), resx, resy, ref.getOrigin()[0], ref.getOrigin()[1] ); SimpleRaster hillShade = new SimpleRaster( shadeData, raster.getEnvelope(), ref, null );
/** * Creates an in-memory gridded tile container from the given tile container. * * @param orig * @return an in-memory gridded tile container. * @throws IOException */ public static GriddedMemoryTileContainer create( GriddedTileContainer orig ) throws IOException { int rows = orig.getRows(); int columns = orig.getColumns(); AbstractRaster[] cells = new AbstractRaster[rows * columns]; for ( int rowId = 0; rowId < rows; rowId++ ) { for ( int columnId = 0; columnId < columns; columnId++ ) { cells[orig.getTileId( columnId, rowId )] = orig.getTile( rowId, columnId ); } } return new GriddedMemoryTileContainer( orig.getRasterReference().getOriginLocation(), orig.getEnvelope(), rows, columns, orig.tileSamplesX, orig.tileSamplesY, cells ); } }
@Override public void setSubRaster( double x, double y, AbstractRaster source ) { RasterGeoReference srcREnv = source.getRasterReference(); RasterGeoReference dstREnv = new RasterGeoReference( srcREnv.getOriginLocation(), srcREnv.getResolutionX(), srcREnv.getResolutionY(), x, y ); Envelope dstEnv = dstREnv.getEnvelope( source.getColumns(), source.getRows(), source.getCoordinateSystem() ); RasterData srcData = source.getAsSimpleRaster().getRasterData(); SimpleRaster movedRaster = new SimpleRaster( srcData, dstEnv, dstREnv, metadata ); setSubRaster( dstEnv, movedRaster ); }
/** * 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 dstREnv = RasterGeoReference.create( sourceRaster.getRasterReference().getOriginLocation(), dstEnvelope, dstWidth, dstHeight );