Unidata - To provide the data services, tools, and cyberinfrastructure leadership that advance Earth system science, enhance educational opportunities, and broaden participation. Unidata
         
  advanced  
 

[visad] another offscreen question

I having been using visad to produce png images.  My current approach is this:

1 given a map projection P and a pair of lat,lons (representing the corners of some region of interest), produce a rectangle, call in W, where W's dimensions are in km.

2 set W as the defaultMapArea of P. This results in W mapping to the visad 'box', which is in the visad coordinate space, and extends from -1 to 1 in x and y. This is an affine transform, call it A1.

3 For some given scale S of pixels per km, create an offscreen DisplayImpl of size W.width * S, W.height * S. thus we have a buffered image B of this size.

4 Adjust the projection matrix such that the visad box maps exactly to B, so e.g. -1,-1 -> 0, B.height. Call this affineTransform A2.

5 Add some lat,lon data, say a bathy dataset, and let visad produce B

6 Given B, I then cut it up into non-overlapping tiles of say 256 pixels square. This last step is not a visad operation, just a BufferedImage.subImage op.

I need transparent images, so I have altered VisadCanvasJ2D to build buffered images of type INT_RGBA (which I suspect costs me 4 bytes per pixel)

I am running into memory issues. Looking at VisadCanvasJ2D, there are 3 bufferedimages in memory at once when deriving the 'captured' image: images[0], aux_image and captureImage. The memory requirement for the app is thus:

W.width * S * W.height * S * 4 * 3

which for a 750km square W and S = 8 is 432MB.

As W gets larger, or we want larger S ( more 'zoomed in' levels ), my app is 
dying.

So my question (finally) is can I organize the app in any other way? Can I just build B so that it is the same size as a tile. If I then change A1 over and over, aligning A1 to map to each tile, am I paying the cost of re-transforming all the input data every time? I guess so. Or can I just change A2, saving on data transformations? Is it a requirement that B is the 'full size' image or can B just be the size of a tile??

Or I could just add more RAM and not try to solve this issue at all...


Any help appreciated

Stuart



 
 
  Contact Us     Site Map     Search     Terms and Conditions     Privacy Policy     Participation Policy
 
National Science Foundation (NSF) UCAR Community Programs   Unidata is a member of the UCAR Community Programs, is managed by the University Corporation for Atmospheric Research, and is sponsored by the National Science Foundation.
P.O. Box 3000     Boulder, CO 80307-3000 USA     Tel: 303-497-8643     Fax: 303-497-8690