Hi,
during the last few days I've been working on implementing
WMS cascading for GeoServer trunk.
The first patch is ready and attached to http://jira.codehaus.org/browse/GEOS-623.
I'm going to make a formal GSIP tomorrow, but in the meantime
allow me to share a few screenshots of the work and a brief
description.
Once patched the GUI allows to create a new "WMS store" by
providing a capabilities link. After that we get to the usual
layer listing, and then to the usual layer configuration
page.
The layer config page metadata are filled using the values
found in the cascaded WMS capabilities document, including
bounds, srs, descriptions, keywords and whatnot.
The only visible difference compared to a normal layer config
page is that you don't have a style chooser, since cascading
works, at this point, by simply using the default style.
The preview shows the cascaded layers with their own icon
(thanks Rollie for being prevident and preparing WMS layer
icons as well), and you can then follow and browse the
cascaded maps as if they were local.
Functionality implemented in the GetMap cascading:
- standard cascading
- reprojected cascading, trying to pass down to the remote
server the destination SRS when possible, reprojecting
on the client when not possible (see the EPSG:900913
reprojection screenshot, looks nice because the srs
was passed down)
- request merging, if n consequent layers are cascaded
from the same server a single GetMap will be issued
- the WebMapServer instance is cached at the ResourcePool
level making sure we don't do too many GetCapabilities
requests (caching the WebMapServer object results in
the caching of the GetCapabilities response)
I've also implemented GetFeatureInfo cascading for the
case in which the remote server supports GML2 output
This has been tested against GS only, could not find
a MapServer instance that actually does GML output,
often it's listed in the caps but results to the request are
consistently empty.
GetFeatureInfo cascading works also in the reprojected
case.
What's missing? Well, I guess it's enough for the first
cut (the sponsored one), though of course we can do better
a number of things:
- add support for alternate styles
- allow the admin to specify a timeout (right now it's
hard coded)
- full support in Restconfig (we need to add new resources
there)
- improve the GeoTools client code so that we can use
HTTP 1.1 persistent connections and limit the number
of parallel connections we make to a single server
(right now GS is badly behaved from an HTTP client
point of view).
- allow the user to choose the format used for cascading.
Now we try png
- maybe add a pure proxy mode, if the request contains
only cascaded layers avoid decoding the image to just
re-encode it afterwards
- add support for WMS with access restrictions (this is
really just a matter of configuration, the gt2 module
does that already)
- support cascaded layers in GetMap requests that use
&SLD and &SLD_BODY
Anyone interested in picking up from the above list?
Cheers
Andrea
--
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.
(attachments)