Ciao Milton,
I downloaded and checked your image. A few annotations:
- here is part of the gdalinfo
Driver: MrSID/Multi-resolution Seamless Image Database (MrSID)
Files: 161866.sid
Size is 8000, 8000
Coordinate System is:
PROJCS["NAD83 / Massachusetts Mainland",
GEOGCS["NAD83",
DATUM["North_American_Datum_1983",
SPHEROID["GRS 1980",6378137,298.2572221010002,
AUTHORITY["EPSG","7019"]],
AUTHORITY["EPSG","6269"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4269"]],
PROJECTION["Lambert_Conformal_Conic_2SP"],
PARAMETER["standard_parallel_1",42.68333333333333],
PARAMETER["standard_parallel_2",41.71666666666667],
PARAMETER["latitude_of_origin",41],
PARAMETER["central_meridian",-71.5],
PARAMETER["false_easting",200000],
PARAMETER["false_northing",750000],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AUTHORITY["EPSG","26986"]]
Origin = (157000.000000000000000,870000.000000000000000)
Pixel Size = (0.500000000000000,-0.500000000000000)
IMAGE__WKT=PROJCS["NAD83 / Massachusetts Mainland",GEOGCS["NAD83",DATUM["North
_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.2572221010002,AUTHORITY["E
PSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0],UNIT["degree",0.01
74532925199433],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2S
P"],PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_paral
lel_2",41.71666666666667],PARAMETER["latitude_of_origin",41],PARAMETER["central_
meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",75
0000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","26986"]]
Corner Coordinates:
Upper Left ( 157000.000, 870000.000) ( 72d 1'10.82"W, 42d 4'45.22"N)
Lower Left ( 157000.000, 866000.000) ( 72d 1'9.76"W, 42d 2'35.57"N)
Upper Right ( 161000.000, 870000.000) ( 71d58'16.79"W, 42d 4'45.97"N)
Lower Right ( 161000.000, 866000.000) ( 71d58'15.83"W, 42d 2'36.32"N)
Center ( 159000.000, 868000.000) ( 71d59'43.30"W, 42d 3'40.78"N)
Band 1 Block=1024x128 Type=Byte, ColorInterp=Red
Minimum=19.000, Maximum=234.000, Mean=140.080, StdDev=27.898
Overviews: 4000x4000, 2000x2000, 1000x1000, 500x500, 250x250, 125x125, 63x63,
32x32
Band 2 Block=1024x128 Type=Byte, ColorInterp=Green
Minimum=12.000, Maximum=233.000, Mean=125.267, StdDev=26.812
Overviews: 4000x4000, 2000x2000, 1000x1000, 500x500, 250x250, 125x125, 63x63,
32x32
Band 3 Block=1024x128 Type=Byte, ColorInterp=Blue
Minimum=20.000, Maximum=233.000, Mean=107.674, StdDev=24.172
Overviews: 4000x4000, 2000x2000, 1000x1000, 500x500, 250x250, 125x125, 63x63,
32x32
This means, 3 bands, size 8k*8k at the highest res with tiling of 1024*128.
By default the Imageio-ext gdal plugin does not use JAI ImageRead but
tries to do a full read using the ImageReader.
The error you are seeing is the underlying JVM running out of direct
memory (fast native mapped heap), see here [1] for reference.
If you want to be able to read and reproject larger raster through
imageio-ext with low memory footprint. You can do something like this:
// get a reader
final BaseGridCoverage2DReader reader = new MrSIDReader(TestData.file(
this, fileName));
final ParameterValue tilesize = (ParameterValue)
((BaseGDALGridFormat)
reader.getFormat()).SUGGESTED_TILE_SIZE.createValue();
tilesize.setValue("512,512");
final ParameterValue useJaiRead = (ParameterValue)
((BaseGDALGridFormat)
reader.getFormat()).USE_JAI_IMAGEREAD.createValue();
useJaiRead.setValue(true);
final ParameterValue mt = (ParameterValue)
((BaseGDALGridFormat)
reader.getFormat()).USE_MULTITHREADING.createValue();
mt.setValue(true);
GridCoverage2D gc = (GridCoverage2D) reader.read(new
GeneralParameterValue[] { tilesize, useJaiRead,mt });
This does:
1> retiling on read to have better tile size
2> use JAI ImageRead instead of doing a plain read on the ImageReader
3> use multithreading capabilities of our ImageReader and our
ImageReadMT operation. You can control the number of tile through
JAI.getDefaultInstance().getTileScheduler().setParallelism(numTile);
With the above setting I have been able to reproject the image with
these low footprint settings :
-XX:MaxDirectMemorySize=8M -Xmx16M
Ciao,
Simone.
On Tue, Oct 7, 2008 at 8:34 PM, Milton Jonathan
<[EMAIL PROTECTED]> wrote:
> Hello there
>
> I've been playing around reprojecting imagery and found that everything
> works fine with tiny MrSID files. However, when attempting to read a
> larger file (e.g.,
> ftp://data.massgis.state.ma.us/pub/wave/coqhsid/east/161866.sid), I get
> an "OutOfMemoryError: Direct buffer memory" exception.
>
> The reason is probably because I am trying to read everything into
> memory (using GridCoverageReader.read(null), which by the way is
> deprecated). So, what would be the current suggested way of doing this,
> so that I simply specify the reprojection operation without having to
> read everything? I am aware that the Coverage API is going to change,
> but it would still be good to know how to do things right with the
> current library available.
>
> My current code goes as follows (using GeoTools version 2.5-RC1):
>
>
> File file = new File("D:\\data\\source.sid");
> File destFile = new File("D:\\data\\dest.tif");
>
> AbstractGridFormat gridFormat =
> (AbstractGridFormat)GridFormatFinder.findFormat(file);
> if (gridFormat instanceof UnknownFormat)
> throw new FactoryException("Cannot find a reader for file " + file);
>
> GridCoverageReader reader = gridFormat.getReader(file, hints);
> GridCoverage2D coverage = (GridCoverage2D) reader.read(null);
>
> CoordinateReferenceSystem sourceCRS =
> coverage.getCoordinateReferenceSystem();
> CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4326");
>
> GridCoverage2D coverageTransf = (GridCoverage2D)
> Operations.DEFAULT.resample(coverage, targetCRS);
>
> GeoTiffWriter writer = new GeoTiffWriter(destFile);
> writer.write(coverageTransf, null);
>
>
>
> Thanks!
> Milton
>
> --
>
> Milton Jonathan
> Grupo GIS e Meio Ambiente
> Tecgraf/PUC-Rio
> Tel: +55-21-3527-2502
>
>
> -------------------------------------------------------------------------
> 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
>
--
-------------------------------------------------------
Eng. Simone Giannecchini
GeoSolutions S.A.S.
Owner - Software Engineer
Via Carignoni 51
55041 Camaiore (LU)
Italy
phone: +39 0584983027
fax: +39 0584983027
mob: +39 333 8128928
http://www.geo-solutions.it
http://www.geo-solutions.it/simone.giannecchini
http://www.linkedin.com/in/simonegiannecchini
-------------------------------------------------------
-------------------------------------------------------------------------
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