Thanks for your prompt response Michael,

The original coverage is the one I want to modify, the code is:

        File inasc = new File("/gsdata/data/lsa/sci/shore.asc");
        ArcGridReader agr = new ArcGridReader(inasc);
        GridCoverage2D aCoverage = (GridCoverage2D)agr.read(null);
        GridCoverageFactory gcf =
CoverageFactoryFinder.getGridCoverageFactory(null);
        CoordinateReferenceSystem crs =
aCoverage.getCoordinateReferenceSystem();
        log.debug("using following CRS: "+crs.toWKT());
        Envelope2D envelope2d = aCoverage.getEnvelope2D();
        float[][] data = new
float[Double.valueOf(xSizeOut).intValue()][Double.valueOf(ySizeOut).intValue()];
        GridCoverage2D cov = gcf.create("cov", data, envelope2d);

        WritableGridCoverage2D writableCov = new WritableGridCoverage2D(cov);


I´ve also seen that you can use hints with the GridCoverageFactory
create method, but I can´t find a .create() signature that receives
the matrix of floats (data) that I want to modify in the simple way
you do:
 for (int x = 0; x < xSizeOut; x++) {
                for (int y = 0; y < ySizeOut; y++) {
                GridCoordinates2D aCoord = new GridCoordinates2D(x, y);
                value = aCoverage.evaluate(aCoord, dest);
                writableCov.setValue(aCoord, lsaWeigth(value[0]));//my
special analysis function that arcGIS doesn't have!
            }

If I "clip" the map puting xSizeOut=ySizeOut, everything goes well
(map now being a square), but the cell size changes so my map doesn't
align anymore (because the xllcorner, yllcorner and CRS of the
envelope2D remain the same!)

Thanks for your help, greatly appreciated!!

Marcos Nino-Ruiz
Computer and Systems engineer
CRC for Spatial Information
The University of Melbourne
Victoria 3010
Australia



On Fri, Jul 29, 2011 at 7:25 PM, Michael Bedward
<[email protected]> wrote:
> On 29 July 2011 10:33, Marcos Nino-Ruiz <[email protected]> 
> wrote:
>> Hi dear everyone, especially Michael Bedward,
>
> Oh-oh... I always fear bad news when my name is mentioned up front.
>
>> I´m trying to build upon your
>> org.geotools.demo.coverage.WritableGridDemo.java example, because I
>> need to create my own  Arc Grid Coverage.
>
> Don't expect production quality code with that one. If I remember
> rightly, it was a quick hack in response to a question on the list a
> couple of years ago.
>
>> I want to modify the values
>> of the raster and then save them in an ArcGrid coverage. The problem
>> is, if I want to have a more realistic coverage, with X and Y
>> dimensions different (not a square) when I go to save that coverage,
>> using :
>> //        writableCov.show();
>>        String coveragePath= "covargeResult.asc";
>>        File outasc = new File(lsaResult);
>>        if (outasc.exists())
>>            outasc.delete();
>>        ArcGridWriter agw;
>>        agw = new ArcGridWriter(outasc);
>>        agw.write(writableCov, null);
>>
>> It will show the following exception:
>> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
>>        at 
>> com.sun.media.jai.iterator.WritableRandomIterFallback.makeCurrentWritable(WritableRandomIterFallback.java:33)
>>        at 
>> com.sun.media.jai.iterator.WritableRandomIterFallback.setSample(WritableRandomIterFallback.java:59)
>>        at 
>> edu.unimelb.climatechange.lsa.WritableGridCoverage2D.flushCache(WritableGridCoverage2D.java:240)
>>        at 
>> edu.unimelb.climatechange.lsa.WritableGridCoverage2D.getRenderedImage(WritableGridCoverage2D.java:135)
>>        at 
>> org.geotools.gce.arcgrid.ArcGridWriter.writeGridCoverage(ArcGridWriter.java:250)
>>        at 
>> org.geotools.gce.arcgrid.ArcGridWriter.write(ArcGridWriter.java:506)
>
> Right - so the problem seems to be that the JAI iterator used to write
> the value to the image has been pointed to an invalid image location.
> But the flushCache method is deferring to the super class to convert
> world to grid (image) coordinates. So perhaps the problem goes back to
> when you are setting up the GridCoverage2D object that you
> subsequently pass to the WritableGridCoverage constructor.  Could you
> post a snippet for how you are doing that please ?
>
> Michael
>

------------------------------------------------------------------------------
Got Input?   Slashdot Needs You.
Take our quick survey online.  Come on, we don't ask for help often.
Plus, you'll get a chance to win $100 to spend on ThinkGeek.
http://p.sf.net/sfu/slashdot-survey
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to