Hi all,

I would submit a proposal for changing the GeoWebCache WMSTileFuser class.

This class presents some limitations associated to bad performances on
reading the input tiles and writing the final image. These performances are
dued to a direct call to the ImageIO methods.

A possible improvement could be to skip the ImageIO methods by adding some
classes which internally handle image writing and reading. Also the output
image can be optimized, if it is PNG8, with an optimal colorTable. Finally
better performance and quality results could be achieved with improvements
on the image scaling phase.

This proposal requires moving some code to avoid cyclic dependencies:

   - moving Quantizer from GeoServer to GeoTools.
   - moving the new PNGEncoder from GeoServer to ImageIO-Ext and leaving
   only a single facade class which calls the PNGEncoder.

The GeoServer, GeoTools, GeoWebCache and ImageIO-Ext versions are all taken
from their master branch, but a backport will be needed:

   - for Geoserver on 2.4.x;
   - for GeoWebCache on 1.5.0;
   - for ImageIo-Ext on 1.1.x;
   - for GeoTools 10.x.


The modifications on the WMSTileFuser class can be divided in 3 groups:

   - improving the reading of every tile and the final image writing by
   adding few classes and avoiding to call directly the ImageIO class, which
   requires a lookup of the streams and readers/writers;
   - improving the PNG8 images by applying the Quantizer on them;
   - improving the scaling of the final image by adding RenderingHints.

The first improvement consist of creating 2 container classes which
internally handle the writing/reading by automatically using the
encoder/decoder for the defined MimeType. These encoders/decoders are
defined in the Spring application context as subclasses of 2 new abstract
classes called ImageDecoder and ImageEncoder. Each subclass internally
searches all the Spi classes defined in the associated bean configuration
and then stores the first Spi available. All the encoder/decoder beans are
injected into the related container when the application is launched.

For PNG images, the new GeoServer PNGEncoder is used by default, but the
user can disable this functionality by changing a property file associated.


An UML diagram could help understanding these modifications.

The second improvement consists of calculating an optimal ColorTable
associated to the image with the Quantizer class.

The last improvement consists of using an optimal configuration for the
RenderingHints for having better quality and speed.

The estimated time is 1/2 days.

If there is any question I would be pleased to answer.

Best Regards,
Nicola Lagomarsini.

-- 
==
Our support, Your Success! Visit http://opensdi.geo-solutions.it for more
information.
==

Ing. Nicola Lagormarsini
Junior Software Engineer

GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054  Massarosa (LU)
Italy
phone: +39 0584 962313
fax:   +39 0584 1660272

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

-------------------------------------------------------

<<attachment: uml_diag.png>>

------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
GeoTools-Devel mailing list
GeoTools-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to