Added by jgarnett, last edited by jgarnett on Aug 24, 2007  (view change)

Labels

 
(None)

You can use the "Resample" operation to do most kind of GridCoverage2D Transformations (resample an original down to a smaller size, or resample it in a different CoordinateReferenceSystem).

Image Transformation to a Different CRS

Here is an example provided by Simone to transform from "EPSG:4326" to "EPSG:32632":

// get a reader for the image
    final WorldImageReader wiReader = new WorldImageReader(new File(
				"D:\\data\\ikonos_rgb\\ikonos_rgb.tif"));
    // get the coverage
    GridCoverage2D coverage = (GridCoverage2D) wiReader.read(null);

    // now that we have the input image let's try to mess it up writing onto
    // a new bufferedimage with a strange color model
    final BufferedImage bi = new BufferedImage(coverage.getGridGeometry()
        .getGridRange().getLength(0), coverage.getGridGeometry()
        .getGridRange().getLength(1), BufferedImage.TYPE_INT_BGR);

    ((Graphics2D) bi.getGraphics()).drawRenderedImage(
        coverage.getRenderedImage(),
        AffineTransform.getTranslateInstance(0, 0)
    );
    coverage = FactoryFinder.getGridCoverageFactory(null).create(
        "I_need_a_long_vacation", bi, coverage.getEnvelope());

    // resample the created coverage
    coverage = (GridCoverage2D) Operations.DEFAULT.resample(
        coverage,
	CRS.decode("EPSG:32633")
    );
    final RenderedImage resampled =coverage.getRenderedImage();

    // Painting some other BufferedImages PNG or JPEGS on the Canvas of
    // by using
    // the bi.getGraphics().drawImage(Image,..) Method
    ((Graphics2D) bi.getGraphics()).drawRenderedImage(
         resampled,
         AffineTransform.getTranslateInstance(0, 0)
    );

    // write it down
    ImageIO.write(bi, "tiff", new File("d:\\data\\b.tif"));

Here is a example origionally provided by Martin to transforms from "EPSG:4326" to "EPSG:32632":

CoordinateReference sourceCRS = CRS.decode("EPSG:4326");
CoordinateReference targetCRS = CRS.decode("EPSG:32632");
RenderedImage image = ...
Envelope envelope = ...
envelope.setCoordinateReferenceSystem(sourceCRS);
GridCoverage2D coverage = coverageFactory.create("My coverage", image, envelope);
coverage = Operations.DEFAULT.resample(coverage, targetCRS);