Hey all,
As part of the GeoNode/GeoServer/GWC integration work I'm doing, I'm working on the ability for the integrated GWC to sit in front of the regular GeoServer WMS so that tile requests that happen to fit a GWC tile get served by GWC, providing automatic caching for the regular WMS.
(planning to make it an opt-in configuration option, and accompanied by the GWC diskquota module so that you're in control of the cache size, don't worry )
Thing is, if my understanding is correct, that the regular WMS acts as a liberal tiling server in that it can create tiles of any dimension and for any "tileOrigin", which is great. But this tighter GWC integration will only work when a tile requested fits into a configured gwc griset for the requested layer. Beware I'm _not_ saying to keep the regular WMS from being as flexible as it currently is. Only thing I'm looking for is for an easier way to get clients "the right" gridsets.
Would love to hear your opinions on the following ideas then:
- How about improving the WMS GetCapabilities so that if TILED=true is passed over, the integrated GWC contributes to the document with the WMS-C vendor specific capabilities elements?
- It would really help if the layer preview page (actually the OpenLayersMapProducer) generated the OL client in a way consistent with how GWC generates default gridsets
- As a starting point for my future GWC UI enhancements in GeoServer, I would replace the current direct link to the GWC REST forms by a wicket page with the same links to the seeder etc, but allowing to set a couple minimum configuration options like the opt-in checkbox to enable this kind of WMS integration
- Tiling clients (OL based ones at least) usually need to parse the GetCaps document to figure out a sensible tilesOrigin parameter based on the layer bounds, and set up a set of resolutions that match the layer bounds. I think it'd be easier and more effective (thinking that the primary usage for tiled layers is to create mash ups where the tileset is a property of the map?) to always use CRS area of validity corner as tileOrigin, and to use grisets based on the whole CRS area of validity instead of on per layer bounds. There's the issue of a layer occupying only a tiny part of its CRS area of validity, which I don't think is such a big problem as: the number of tiles for the higher zoom levels is gonna be really small anyways, and we should be able of configuring a layer cache to cache only a range of zoom levels.
If you're thinking why not direct the clients to the GWC WMS GetCapabilities URL and that's it... that's a valid question. First, I think this would tell a much better story wrt _integration_ with GWC. Then, you could still use the GWC WMS url directly, difference is that the GWC WMS and the GeoServer WMS don't necessarily contain the same set of Layers (as you can add more layers to GWC through geowebcache.xml), and in the near future you'll also be able to opt-out from caching GeoServer layers (on a layer by layer basis), so the two keep being completely different beasts.
Any thought's much appreciated.
Cheers,
Gabriel
Gabriel Roldan
groldan@anonymised.com
Expert service straight from the developers