It still does not work properly for big grids.  For 2 MB Grid it works fine.
But for 40 MB only part of the Grid is changed.
I used following:

RenderedImage ri = gridCoverage2D.getRenderedImage();
tImg = new TiledImage(ri, true);
        for (int numXtiles=0; numXtiles<tImg.getNumXTiles(); numXtiles++){
                for (int numYtiles=0; numYtiles<tImg.getNumYTiles(); 
numYtiles++){
                        WritableRaster wr = tImg.getWritableTile(numXtiles, 
numYtiles);
                        WritableRectIter iter = 
RectIterFactory.createWritable(wr, null);
                        for (int y=0; y<wr.getHeight(); y++){
                           for (int x=0; x<wr.getWidth(); x++){
                                iter.setSample(123.45);
                                iter.nextPixel();
                            }
                            iter.nextLine();
                            iter.startPixels();
                        }
                        tImg.releaseWritableTile(numXtiles, numYtiles);
                }
        }


To save Grid I used:
        ArcGridWriter writer = new ArcGridWriter(new File("output.asc"));
        writer.write(gridCoverage2D, null);

If I create a new GridCoverage2D everything works with large grids as well.
But I did not managed to prperly format new grid coverage.
if I write sample 123.45 only 123.0 is written.
If I used following:
        GridCoverageBuilder builder = new GridCoverageBuilder();
        builder.setEnvelope(env);
        Variable elevation = builder.newVariable("Elevation", SI.METRE);
        elevation.setLinearTransform(0.01, 0);
        elevation.addNodataValue("No data", -9999);
        builder.setImageSize(sizeX, sizeY);
        builder.setSampleRange(-1000, 20000);
        GridCoverage2D newgc = builder.getGridCoverage2D();
 
I tried to set 12345 instead of 123.45 and then transform it:
elevation.setLinearTransform(0.01, 0);
But there are 2 problems:
1. it writes to file 123.44999996543 instead of 123.45
2. I have to set large sample range and this leads to out of memory error.


Bummer.

This might be grasping at straws, but does it make any difference if
you use an iterator ?

For example...

RenderedImage rImg = cov.getRenderedImage();
TiledImage tImg = new TiledImage(rImg, true);
WritableRectIter iter = RectIterFactory.createWritable(tImg, null);
float c = (float)100;
for (int y = tImg.getMinY(); y <= tImg.getMaxY(); y++) {
    for (int x = tImg.getMinX(); x <= tImg.getMaxX(); x++) {
        iter.setSample(c);
    }
    iter.nextLine();
    iter.startPixels();
}

Michael
-- 
View this message in context: 
http://www.nabble.com/WritableRaster-and-GridCoverageBuilder-tp19690976p19744344.html
Sent from the geotools-gt2-users mailing list archive at Nabble.com.


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to