[Geoserver-devel] Coverages, pyramids WCS, raster WMS etc. etc. etc. etc.

I have been away for a while (the whole month of june), I have spent
onw month in Norway in a test-bed to evaluate new GIS technologies.
I used the GeoServer along with the WCS, which by the way was veloped
on purpose for this event, with good results and feedback.
As a a result of all the work we carried out up there, me and Alessio
have some imporvements and new features we would like to add to
GeoTools-GeoServer (the ingestion engine Alessio is talking about is
one of them) therefore we want to start sending some emails to open
discussions which should be fruitful.

The topic of this first email from me is about overviews aka pyramids
for coverages.
I have been studying JAI deeply in the last two months, in al its
possible aspects of it and the conclusions are:
1>JAI's great but its learning curv is so damned ripid.
2>Martin's code for Coverage's support is very good.
3>The code I wrote for the plugins suck!

I want to refactor all the GridCoverage plugins in order to use JAI
and Martin's code properly but I also have some new features I would
like to add, especially to provide better support for WMS and WCS,
like native support for overviews.
The GeoApi interfaces for GridCoverage allows the users to ask for
overviews and I would like to use them inside the GridCoverageRender
to improve performances on giant images. Let me point out that I am
talking about precompute overviews by using subsampling on the same
Image, I am not talking about subsampling the image on the fly ( I
will discuss this in a successuve email) which may be suitable for
image format th do not support writing multiple images in the same
file.
Image formats like tiff or JPeg2k support writing multiple images in a
single file pretty easily by using ImageIO de/coders and JAI provide
a class very suitable for handling a vector of images at progressive
lower resolution called MultiResolutionRenderableImage (it is
obviously a renderable image) which allows the user to just load the
pyramid into it as a vector of rendered image and then ask for a
scaled rendering.
The intrinsic problem I see here is that to create a GridCoverage2D
you need to provide a RenderedImage (or a PlanarImage which is an
implementation) since it does not accept a RenderableImage.
Looking around I found another useful class to work this issue out,
the RenderedImageList, which is a RenderedImage but also holds a list
of dependent images (like subsampled ones) therefore we could use this
internally to build a MultiResolutionRenderableImage. Again this
wouldn't work since the back end of a GridCoverage2D is a PlanarImage
and (I still have to check carefully) at the construction time the
RenderedImageList would be wrapped into a PlanarImage loosing all the
secondary images.

For the moment I think it is enough, I hope someone (Martin ? :slight_smile: )
gets interested, check this email and share some thoughts.

Simone.

simone giannecchini wrote:

I have been away for a while (the whole month of june), I have spent
onw month in Norway in a test-bed to evaluate new GIS technologies.
I used the GeoServer along with the WCS, which by the way was veloped
on purpose for this event, with good results and feedback.

Congrats!

GeoTools-GeoServer (the ingestion engine Alessio is talking about is
one of them) therefore we want to start sending some emails to open
discussions which should be fruitful.

I am still not sure what you mean about that, I assume you want an easier way to configure GeoServer. I am still waiting for the screen that lets put little check marks next to the FeatureTypes you want to publish...

I want to refactor all the GridCoverage plugins in order to use JAI
and Martin's code properly but I also have some new features I would
like to add, especially to provide better support for WMS and WCS,
like native support for overviews.

Can I also ask that we go one step below GridCoverageExchange? As far as I know GCE is
incomplete and we may do better with a simplier API that could be used to implement a GCE
(much like DataStore is used to implement a WFS).

The intrinsic problem I see here is that to create a GridCoverage2D

We don't need to go to a GridCoverage2D - that is just the first working GridCoverage
implementation. As I understand it you can make additional GridCoverage implementations
based on your data structure.

Looking around I found another useful class to work this issue out,
the RenderedImageList, which is a RenderedImage but also holds a list
of dependent images (like subsampled ones) therefore we could use this
internally to build a MultiResolutionRenderableImage. Again this
wouldn't work since the back end of a GridCoverage2D is a PlanarImage
and (I still have to check carefully) at the construction time the
RenderedImageList would be wrapped into a PlanarImage loosing all the
secondary images.

Would it help if we made use of SLD to explicitly map from a GridCoverage (grid of measures)
to an Image (grid of Colors)?

I just want to confirm that you are not getting stuck on the the GridCoverage2D implementation? I am pretty sure you have more freedom then that.

For the moment I think it is enough, I hope someone (Martin ? :slight_smile: )
gets interested, check this email and share some thoughts.

Cheers,
Jody

AWESOME!

geotools-devel-admin@lists.sourceforge.net wrote on 07/15/2005 12:49:56 PM:

1>JAI's great but its learning curv is so damned ripid.

Amen.

2>Martin's code for Coverage's support is very good.

Here here.

3>The code I wrote for the plugins suck!

You're not alone. GeoTIFF totally ignores JAI.

I want to refactor all the GridCoverage plugins in order to use JAI
and Martin's code properly

If refactoring plugins is in the works, we might be able to wrest GRIB,
GeoTIFF, HDF5 and NetCDF formats out of the NetCDF library from Unicar.
They've built up their own little geospatial abstraction and adapted all of
these formats to it. It even understands the common NetCDF geospatial
conventions. We could get all of this by adapting their abstraction into
the GeoAPI framework... Just a thot.

As to multiresolution stuff, here's your stress case: The 43k x 21k NASA
1km Blue Marble image. It's a 50Mb JPEG which requires over 2Gb to load
and store in memory all at once. If you can tune JAI and get pyrimids
going such that a common computer can ingest and process it (or serve it
using Geoserver WCS), you won't get any complaints about plugins failing on
big images. We tried (and failed) to serve it with Geoserver WCS last week
(just to see if it would work.) Oh well. You get this working you can
spend the following week just walking around grunting and making manly
noises. :slight_smile:

Image formats like tiff or JPeg2k support writing multiple images in a
single file pretty easily by using ImageIO ....
MultiResolutionRenderableImage ....
The intrinsic problem I see here is that to create a GridCoverage2D
you need to provide a RenderedImage

I think Jody may be on to something here (about getting stuck with the
GridCoverage2D implementation). However, I think there is a deeper issue
which we cannot solve with an alternate implementation of a GeoAPI grid
coverage. I think Grid Coverages are supposed to be immutable, which means
their dimensions and resolution must be known at creation time. This
suggests that any alternate implementation would suffer the same
shortcomings you note here. You may do better making a factory class which
can produce gridcoverages as soon as the user requests a resolution.

Alternatively, you may want to make a Coverage implementation backed by the
MultiResolutionRenderableImage because Coverage has no predefined grid
spacing. Then if a user really wants a GridCoverage, some utility code can
be written to "sample" the Coverage at a given resolution.

Just thinking.

About multiple images, Alex and I just discovered that with one 48 hour
meterological forecast of 4 variables at three heights, we're generating
~600 separate layers to manage with the WCS. Accessing multiple grids in
the same file would definately clean up the back end a little.

Bryce

On 7/15/05, Bryce L Nordgren <bnordgren@anonymised.com> wrote:

AWESOME!

geotools-devel-admin@lists.sourceforge.net wrote on 07/15/2005 12:49:56 PM:

> 1>JAI's great but its learning curv is so damned ripid.
Amen.

> 2>Martin's code for Coverage's support is very good.
Here here.

> 3>The code I wrote for the plugins suck!
You're not alone. GeoTIFF totally ignores JAI.

> I want to refactor all the GridCoverage plugins in order to use JAI
> and Martin's code properly

If refactoring plugins is in the works, we might be able to wrest GRIB,
GeoTIFF, HDF5 and NetCDF formats out of the NetCDF library from Unicar.
They've built up their own little geospatial abstraction and adapted all of
these formats to it. It even understands the common NetCDF geospatial
conventions. We could get all of this by adapting their abstraction into
the GeoAPI framework... Just a thot.

I am working on GeoTiff right now:
-better usage of jai deferred execution model
-tiling on disk and on memory
-pyramids
-finishing with user defined CRS.

As far as it concern with GRIB, I do not like the Unidata Ucar
library, they are not very open to external developer and I had to
argue with one of them when I got to meet him.I used JGrib instead and
I added writing capabilities (Unidata Ucar does not have this). I
already have GridCoverage plugin to read and WRITE grib files but I
never released it since I hadno time to clean it. Alessio is working
on it to clean it up.

Someone was working on NetCDF plugin but I think he got stuck, I will
check that.,

Finally, HDF, I am studying the format right now to see how to wirte a
decent plugin.

The problem so far has been my poor understanding of JAI, but now I
would call myself an intemediate user (well, maybe a bit less than
that :frowning: ) therefore I hope things will come out better than in the
past.

As to multiresolution stuff, here's your stress case: The 43k x 21k NASA
1km Blue Marble image. It's a 50Mb JPEG which requires over 2Gb to load
and store in memory all at once. If you can tune JAI and get pyrimids
going such that a common computer can ingest and process it (or serve it
using Geoserver WCS), you won't get any complaints about plugins failing on
big images. We tried (and failed) to serve it with Geoserver WCS last week
(just to see if it would work.) Oh well. You get this working you can
spend the following week just walking around grunting and making manly
noises. :slight_smile:

JPEG is the worst file format you can pick up! Compressed, no
multipage, no tiling, we will definitely convert that to JPeg2000 or
Tiff after that things willwork smothly. I am making terst with Ikonos
imagery of 50 mb and I aable to see it using tiling and pyramid very
very well.

> Image formats like tiff or JPeg2k support writing multiple images in a
> single file pretty easily by using ImageIO ....
> MultiResolutionRenderableImage ....
> The intrinsic problem I see here is that to create a GridCoverage2D
> you need to provide a RenderedImage

I think Jody may be on to something here (about getting stuck with the
GridCoverage2D implementation). However, I think there is a deeper issue
which we cannot solve with an alternate implementation of a GeoAPI grid
coverage. I think Grid Coverages are supposed to be immutable, which means
their dimensions and resolution must be known at creation time. This
suggests that any alternate implementation would suffer the same
shortcomings you note here. You may do better making a factory class which
can produce gridcoverages as soon as the user requests a resolution.

Check the GridCoverage interface, it allows to create overviews on the
fly, the point is that in GeoTools we do not support that (YET!!!).

I think that the specifications on Coverages are somehow incomplete
since they do not really take into account implemntation of 3d and 4D
coverages. Anyway we are not stuck at all in my opinion. Martin's
classes are great, there is space to do everything we want (just
checthe SpatioTemporalCoverage3D or the CoverageStack or the
CoverageCache.

I am starting the discussione from the base since I want to
coordinate with him as much as possible and I want to build something
that will last. I am being ambitious here, the goals of my and
Alessio's work are:
1>As far ass it concerns with GeoTools support 3D and 4D coverages,
support NetCDF, GriB1, HDF and most imageing format with decimation,
tiling and built-in overviews. Sooner or later we'll also start
working on a RasterSymbolizer.
2>On the GeoServer side we want to complete the implementation of the
WCS features, comprehending time and zlevel support, using more output
formats (HDF?GML?) and we want to really add WMS raster support
whichis now very poor.

Just a note WMS raster support came out because of a great Alessio's
intuition, since we were tasked only to build a protype for a WCS
therefore even if it is somehow poor is way more than expected. The
point now isto use the knowledge acquired to make it good!

Alternatively, you may want to make a Coverage implementation backed by the
MultiResolutionRenderableImage because Coverage has no predefined grid
spacing. Then if a user really wants a GridCoverage, some utility code can
be written to "sample" the Coverage at a given resolution.

The goal of this discussion is, at least for me, to push Martin to
come up with a solution tha will not break any old code or require a
lot of new code. I think with a few changes we will be able to add the
pyramids for example without a lot of worries. Before proceeding I
want to know his opnion since he knows for sure better than me
GridCoverages under geotools and geoapi (and also he knows JAI better
than me! :frowning: ).

Just thinking.

About multiple images, Alex and I just discovered that with one 48 hour
meterological forecast of 4 variables at three heights, we're generating
~600 separate layers to manage with the WCS. Accessing multiple grids in
the same file would definately clean up the back end a little.

I agree, completely.

The idea is:
Ingestion Engine+ support for 3D and 4D coverages+ optimal use of JAI+
more plugins==good WMS, good WCS, good CoverageSupport.

Bryce

Simone.
P.S.
We need help!!!!

I'm glad to see interest in GridCoverage :).

About GridCoverage2D: Simone rightly point out that GridCoverage2D expects a RenderedImage at construction time. However, because of JAI deferred execution mechanism, a RenderedImage should take a negligible amount of memory until the pixel values are first requested. This will not work with java.awt.image.BufferedImage, but should work with most images produced by JAI. The fact that GridCoverage2D wraps RenderedImage in a PlanarImage implementation should not trigs pixel computation ahead of time.

Because BufferedImage do not supports deferred execution, we should banish all methods from javax.imageio returning a BufferedImage. For example we should banish ImageReader.read(...) and use ImageReader.readAsRenderedImage(...) instead. Or yet better, use JAI.create("ImageRead", ...) operation from JAI Image I/O extension (yet an other download after the JAI's one), which should read pixel values only when a tile is first requested.

I agree with Bryce that RenderableImage do not fits naturally with GridCoverage. GridCoverage (no matter which implementation) has know size with know resolution and know grid geometry. RenderableImage has no know geometry; it can be an abstract mathematical formulae producing values at any resolution. The natural matches in my understanding are:

     RenderedImage --> wrapped in two-dimensional GridCoverage
     RenderableImage --> wrapped in two-dimensional Coverage

A Coverage2D implementation for RenderableImage may be a valuable addition to Geotools.

For big images (and I agree with Simone that JPEG2000 is probably the way to go), I would rather try to make JAI's deferred execution work with tiled, pyramidal images. I believe it should work. If it doesn't, lets try to figure out where the pixels are computed ahead of time. If the cause is on our side, lets try to fix that.

simone giannecchini a écrit :

I think that the specifications on Coverages are somehow incomplete
since they do not really take into account implemntation of 3d and 4D
coverages.

Yes. Current GeoAPI is based on a legacy OGC implementation wich should be replaced by ISO 19123. The great new is that I had a look on ISO 19123, and I believe that the transition can be done smootly. getCoordinateReferenceSystem and evaluate methods should stay there for example.

I put a first (partial) set of ISO 19123 interfaces there:

http://cvs.sourceforge.net/viewcvs.py/geoapi/pending/org/opengis/coverage/

The ISO 19123's Coverage interface may looks quite different from the one we currently have, but actually it is not that much different. It contains much more additions than conflicts (for example I like a lot their "evaluateInverse" method, even if it is going to be a lot of work to implement). It has only one "evaluate" method, but it is compatible with our current "evaluate" methods (both in spirit and in the method signature) and doesn't prevent us to put all our current "evaluate" methods in addition, as more efficient ways to get the same information.

Now about the work that need to be done with GridCoverageExchange: this one is quite incomplete too. I hope to get more experience with geotools implementation in order to suggest changes in GeoAPI interfaces. Anyway, my proposal is:

1) Create a javax.imageio.metadata.IIOMetadataFormat implementation
    matching the format described in "GML in JPEG2000" OGC specification.

2) Implement all plugins as javax.imageio.ImageReader implementation,
    and ask them to express their metadata (CRS, envelope, etc.) into
    an javax.imageio.metadata.IIOMetadata object. Which should be as
    much independant as possible from GridCoverage at this stage.

3) Write a single GridCoverageExchange or Format implementation. Given
    an arbitrary javax.imageio.ImageReader, this generic implementation
    should get the image data using JAI.create("ImageRead", ...)
    operation and get the metadata in the format described above using
    the RenderedImage.getProperty("JAI.ImageMetadata") or
    RenderedImage.getProperty("JAI.StreamMetadata") call. Those metadata
    shall be used for creating the appropriate CoordinateReferenceSystem
    or Envelope objects. This way, we should be able to keep raster
    plugins close to independant from GridCoverage (we basically need
    to add to existing ImageReader the capability to express metadata as
    IIOMetadata object in the format described by "GML in JPEG2000").

  What do you think?

    Martin.

Thanks for the great email martin, heck that should be on an RnD page for later reference. Since there is so much interest in GridCoverage could we do a breakout IRC on the topic next week? I think you guys are on opposite sides of the world, but it is a breakout meeting perhaps we can find a time suitable to both of you?

Jody

I'm glad to see interest in GridCoverage :).

About GridCoverage2D: Simone rightly point out that GridCoverage2D expects a RenderedImage at construction time. However, because of JAI deferred execution mechanism, a RenderedImage should take a negligible amount of memory until the pixel values are first requested. This will not work with java.awt.image.BufferedImage, but should work with most images produced by JAI. The fact that GridCoverage2D wraps RenderedImage in a PlanarImage implementation should not trigs pixel computation ahead of time.

Because BufferedImage do not supports deferred execution, we should banish all methods from javax.imageio returning a BufferedImage. For example we should banish ImageReader.read(...) and use ImageReader.readAsRenderedImage(...) instead. Or yet better, use JAI.create("ImageRead", ...) operation from JAI Image I/O extension (yet an other download after the JAI's one), which should read pixel values only when a tile is first requested.

I agree with Bryce that RenderableImage do not fits naturally with GridCoverage. GridCoverage (no matter which implementation) has know size with know resolution and know grid geometry. RenderableImage has no know geometry; it can be an abstract mathematical formulae producing values at any resolution. The natural matches in my understanding are:

    RenderedImage --> wrapped in two-dimensional GridCoverage
    RenderableImage --> wrapped in two-dimensional Coverage

A Coverage2D implementation for RenderableImage may be a valuable addition to Geotools.

For big images (and I agree with Simone that JPEG2000 is probably the way to go), I would rather try to make JAI's deferred execution work with tiled, pyramidal images. I believe it should work. If it doesn't, lets try to figure out where the pixels are computed ahead of time. If the cause is on our side, lets try to fix that.

simone giannecchini a écrit :

I think that the specifications on Coverages are somehow incomplete
since they do not really take into account implemntation of 3d and 4D
coverages.

Yes. Current GeoAPI is based on a legacy OGC implementation wich should be replaced by ISO 19123. The great new is that I had a look on ISO 19123, and I believe that the transition can be done smootly. getCoordinateReferenceSystem and evaluate methods should stay there for example.

I put a first (partial) set of ISO 19123 interfaces there:

http://cvs.sourceforge.net/viewcvs.py/geoapi/pending/org/opengis/coverage/

The ISO 19123's Coverage interface may looks quite different from the one we currently have, but actually it is not that much different. It contains much more additions than conflicts (for example I like a lot their "evaluateInverse" method, even if it is going to be a lot of work to implement). It has only one "evaluate" method, but it is compatible with our current "evaluate" methods (both in spirit and in the method signature) and doesn't prevent us to put all our current "evaluate" methods in addition, as more efficient ways to get the same information.

Now about the work that need to be done with GridCoverageExchange: this one is quite incomplete too. I hope to get more experience with geotools implementation in order to suggest changes in GeoAPI interfaces. Anyway, my proposal is:

1) Create a javax.imageio.metadata.IIOMetadataFormat implementation
   matching the format described in "GML in JPEG2000" OGC specification.

2) Implement all plugins as javax.imageio.ImageReader implementation,
   and ask them to express their metadata (CRS, envelope, etc.) into
   an javax.imageio.metadata.IIOMetadata object. Which should be as
   much independant as possible from GridCoverage at this stage.

3) Write a single GridCoverageExchange or Format implementation. Given
   an arbitrary javax.imageio.ImageReader, this generic implementation
   should get the image data using JAI.create("ImageRead", ...)
   operation and get the metadata in the format described above using
   the RenderedImage.getProperty("JAI.ImageMetadata") or
   RenderedImage.getProperty("JAI.StreamMetadata") call. Those metadata
   shall be used for creating the appropriate CoordinateReferenceSystem
   or Envelope objects. This way, we should be able to keep raster
   plugins close to independant from GridCoverage (we basically need
   to add to existing ImageReader the capability to express metadata as
   IIOMetadata object in the format described by "GML in JPEG2000").

    What do you think?

        Martin.

On 7/16/05, Martin Desruisseaux <martin.desruisseaux@anonymised.com> wrote:

I'm glad to see interest in GridCoverage :).

About GridCoverage2D: Simone rightly point out that GridCoverage2D
expects a RenderedImage at construction time. However, because of JAI
deferred execution mechanism, a RenderedImage should take a negligible
amount of memory until the pixel values are first requested. This will
not work with java.awt.image.BufferedImage, but should work with most
images produced by JAI. The fact that GridCoverage2D wraps RenderedImage
in a PlanarImage implementation should not trigs pixel computation ahead
of time.

Because BufferedImage do not supports deferred execution, we should
banish all methods from javax.imageio returning a BufferedImage. For
example we should banish ImageReader.read(...) and use
ImageReader.readAsRenderedImage(...) instead. Or yet better, use
JAI.create("ImageRead", ...) operation from JAI Image I/O extension (yet
an other download after the JAI's one), which should read pixel values
only when a tile is first requested.

We shoud always use either the ImageRead operation or direclty an
ImageReader from ImageIO, since this way we can read metadata to have
an idea about what we are dealing for (compression, overviews, tiling,
thumbnails, dimensions, etc...) and defer pixel reading.

I agree with Bryce that RenderableImage do not fits naturally with
GridCoverage. GridCoverage (no matter which implementation) has know
size with know resolution and know grid geometry. RenderableImage has no
know geometry; it can be an abstract mathematical formulae producing
values at any resolution. The natural matches in my understanding are:

     RenderedImage --> wrapped in two-dimensional GridCoverage
     RenderableImage --> wrapped in two-dimensional Coverage

I fully agree.

A Coverage2D implementation for RenderableImage may be a valuable
addition to Geotools.

For big images (and I agree with Simone that JPEG2000 is probably the
way to go),

Either JPEG2K or TIFF. Actually I am almost done with a small utility
to generate a multipage tiled tiff, which means a single tiff file
which is tiled on disk and which holds the original image plus a
certain number of overviews. More on this later....

I would rather try to make JAI's deferred execution work
with tiled, pyramidal images. I believe it should work. If it doesn't,
lets try to figure out where the pixels are computed ahead of time. If
the cause is on our side, lets try to fix that.

There are a couple of ways for handling pyramids and decimation aka
subsampling in JAI, let me summarise them for whom are not familiar
with them:
1>ImageMIPMap
This is a RenderedImage subclass which can provide a certain number of
overviews given a RenderedImage (the image at higher resolution) a
downsampler and an interpolation. It basically gives you on the fly
different levels of overview using the downsampler and the
interpolation provided. The resulting images are RenderedImage.

2>ImagePyramid it is a subclass of the previous one and works pretty
the same way. The main difference it allows you to traverse the
pyramid bidirectionally which means as you downsample you cal also
upsample.

-->Annotation.
These two classes are very suitable with file formats that do not
support multiple images in a single file (I realy hate having
overviews in different files, I used that with the MIT OrthoSErver and
it sucks [the approach, not the OrthoServer!]) because they force us
to build the pyramid on the fly. Deferred Execution helps with
processing only pixels we need when they are needed.
<--

3>We can use directly the ImageReader since it allows the user to
perform decimation at reading time using subsampling factors (well we
can do much more than that like cropping, progrsive loading,
offsetting, layout changing...).
-->Annotation.
Not so sure if in our architecture this is useful even if it is very powerful.
<--

4>MultiResolutionRenderableImage, it is a RenderableImage which needs
to be feed with a
certain number of RenderedImages at progressive ower resolution and
which is able to generate rendering at different scales.

-->Annotation.
This is very suitable when you have a file format that support
overviews. You can take advantage of the deferred execution and load
only the level of detail you need when you relly need it. This would
be useful especially with giant images (up to gb) for which having
prebuilt overvies would bereally useful.
<--

By the way, I did not mention this, but I am also working on Large
Dataset support, which means large number of small images doing
mosaicizing+tiling+pyramids, but this is still more on my mind than on
my pc.

simone giannecchini a écrit :
> I think that the specifications on Coverages are somehow incomplete
> since they do not really take into account implemntation of 3d and 4D
> coverages.

Yes. Current GeoAPI is based on a legacy OGC implementation wich should
be replaced by ISO 19123. The great new is that I had a look on ISO
19123, and I believe that the transition can be done smootly.
getCoordinateReferenceSystem and evaluate methods should stay there for
example.

I put a first (partial) set of ISO 19123 interfaces there:

http://cvs.sourceforge.net/viewcvs.py/geoapi/pending/org/opengis/coverage/

I'll take a look at it, I am pretty interested.

The ISO 19123's Coverage interface may looks quite different from the
one we currently have, but actually it is not that much different. It
contains much more additions than conflicts (for example I like a lot
their "evaluateInverse" method, even if it is going to be a lot of work
to implement). It has only one "evaluate" method, but it is compatible
with our current "evaluate" methods (both in spirit and in the method
signature) and doesn't prevent us to put all our current "evaluate"
methods in addition, as more efficient ways to get the same information.

Now about the work that need to be done with GridCoverageExchange: this
one is quite incomplete too. I hope to get more experience with geotools
implementation in order to suggest changes in GeoAPI interfaces. Anyway,
my proposal is:

1) Create a javax.imageio.metadata.IIOMetadataFormat implementation
    matching the format described in "GML in JPEG2000" OGC specification.

We already talked about this, I like it a lot but for the moment we
stil ned to focus on older formats. It would be good to use it as an
internal format for all the georeferenced images, instead of having
png, gif, tiff, jpeg, geotiff, + world file+ prj files, etc.. etc..

2) Implement all plugins as javax.imageio.ImageReader implementation,
    and ask them to express their metadata (CRS, envelope, etc.) into
    an javax.imageio.metadata.IIOMetadata object. Which should be as
    much independant as possible from GridCoverage at this stage.

Me and Alessio have been checking this approach, but for the moment I
have no valid argumentation in favour or against it. Need more time to
check it out.

3) Write a single GridCoverageExchange or Format implementation. Given
    an arbitrary javax.imageio.ImageReader, this generic implementation
    should get the image data using JAI.create("ImageRead", ...)
    operation and get the metadata in the format described above using
    the RenderedImage.getProperty("JAI.ImageMetadata") or
    RenderedImage.getProperty("JAI.StreamMetadata") call. Those metadata
    shall be used for creating the appropriate CoordinateReferenceSystem
    or Envelope objects. This way, we should be able to keep raster
    plugins close to independant from GridCoverage (we basically need
    to add to existing ImageReader the capability to express metadata as
    IIOMetadata object in the format described by "GML in JPEG2000").

        What do you think?

                Martin.

Same as above, very interesting but I might see some troubles. Let's
look at an example. I have a GribCoverageReader I wrote last month, it
uses JGrib to read te grib file. Following your approach I should use
JGriB from Jai and ImageIO and I do not know if that would lower
increase the level of complexity (which usualy means problems...) of
what we do.
I checked carefully the AbstractGridCoverageReader you are
implementing, it would be coeherent with this approach since it forces
us to rely on jai to read coverages, and I somehow like that idea.
Anyway it is interesting that we thought about this approach at the
same time without having talked about it, it means that it is suposed
to be good, therefore I will check it out deeper.

My impellent goal now is to coordinate with Martin (and whoever wants
to help) in order to find a way to suport overview (both prebuilt and
on-the-fly) within the current architecture of the GridCoverages since
we need that for the WMS.
I will send an email with some suggestions next week.

Ciao a tutti.
Simone.

Jody Garnett a écrit :

could we do a breakout IRC on the topic next week? I think you guys are on opposite sides of the world, but it is a breakout meeting perhaps we can find a time suitable to both of you?

I'm available from 22:00 GMT to 10:00 GMT approximatively. Most days of the week should fit.

  Martin.

I am available usually every day of the week since 20:00 GMT to 01:00 GMT .
Simone.

On 7/17/05, Martin Desruisseaux <martin.desruisseaux@anonymised.com> wrote:

Jody Garnett a écrit :
> could we do a breakout IRC on the topic next week? I think you guys are
> on opposite sides of the world, but it is a breakout meeting perhaps we
> can find a time suitable to both of you?

I'm available from 22:00 GMT to 10:00 GMT approximatively. Most days of
the week should fit.

        Martin.

simone giannecchini wrote:

I am available usually every day of the week since 20:00 GMT to 01:00 GMT .
Simone.

I'm available from 22:00 GMT to 10:00 GMT approximatively. Most days of
the week should fit.

Well you two are the ones that I would like to see laying out of plan. 22 GMT works for me, I cant handle two meetings in the same day? How about:
<http://www.timeanddate.com/worldclock/fixedtime.html?month=7&day=20&year=2005&hour=22&gt;

Ooooops.
I think I made a mistake, I am so bad at these things. 22:00 GMT means
24:00 for me it is a bit too late for a meeting!
Tomorrow I will check if I can find a way to use IRC at work otherwise
it is going to be a problem for me.
Simone.

PS:
I know for sure that I can use MSN messenger at work, just in case I
cannot use IRC we could use that to have a conference, just this
time....

On 7/17/05, Jody Garnett <jgarnett@anonymised.com> wrote:

simone giannecchini wrote:
> I am available usually every day of the week since 20:00 GMT to 01:00 GMT .
> Simone.
>
>>I'm available from 22:00 GMT to 10:00 GMT approximatively. Most days of
>>the week should fit.

Well you two are the ones that I would like to see laying out of plan.
22 GMT works for me, I cant handle two meetings in the same day? How about:
<http://www.timeanddate.com/worldclock/fixedtime.html?month=7&day=20&year=2005&hour=22&gt;

Well, there are no other options then having the meeting at 2200 GMT,
I will go to bed late!
Martin, is Jody's suggestion good for you
(http://www.timeanddate.com/worldclock/fixedtime.html?month=7&day=20&year=2005&hour=22)?

Simone.

On 7/17/05, simone giannecchini <simboss1@anonymised.com> wrote:

Ooooops.
I think I made a mistake, I am so bad at these things. 22:00 GMT means
24:00 for me it is a bit too late for a meeting!
Tomorrow I will check if I can find a way to use IRC at work otherwise
it is going to be a problem for me.
Simone.

PS:
I know for sure that I can use MSN messenger at work, just in case I
cannot use IRC we could use that to have a conference, just this
time....

On 7/17/05, Jody Garnett <jgarnett@anonymised.com> wrote:
> simone giannecchini wrote:
> > I am available usually every day of the week since 20:00 GMT to 01:00 GMT .
> > Simone.
> >
> >>I'm available from 22:00 GMT to 10:00 GMT approximatively. Most days of
> >>the week should fit.
>
> Well you two are the ones that I would like to see laying out of plan.
> 22 GMT works for me, I cant handle two meetings in the same day? How about:
> <http://www.timeanddate.com/worldclock/fixedtime.html?month=7&day=20&year=2005&hour=22&gt;
>
>

simone giannecchini a écrit :

Well, there are no other options then having the meeting at 2200 GMT,
I will go to bed late!

I would suggest 20:30 GMT then. I will try to come earlier, but will be able only Friday in my timezone (Thusday in yours).

  Martin.

Cool, we have a deal.
Simone.

On 7/20/05, Martin Desruisseaux <martin.desruisseaux@anonymised.com> wrote:

simone giannecchini a écrit :
> Well, there are no other options then having the meeting at 2200 GMT,
> I will go to bed late!

I would suggest 20:30 GMT then. I will try to come earlier, but will be
able only Friday in my timezone (Thusday in yours).

       Martin.

On 7/20/05, Martin Desruisseaux <martin.desruisseaux@anonymised.com> wrote:

I would suggest 20:30 GMT then. I will try to come earlier, but will be
able only Friday in my timezone (Thusday in yours).

IRC appologies... I just got an unexpected constraint. I will not be able to attend to this IRC. Can we do it next week?

  Martin.

Well if this evening is not suitable just propose an alternative for
the next week.

Simone.

On 7/21/05, Martin Desruisseaux <martin.desruisseaux@anonymised.com> wrote:

> On 7/20/05, Martin Desruisseaux <martin.desruisseaux@anonymised.com> wrote:
>>I would suggest 20:30 GMT then. I will try to come earlier, but will be
>>able only Friday in my timezone (Thusday in yours).

IRC appologies... I just got an unexpected constraint. I will not be
able to attend to this IRC. Can we do it next week?

       Martin.