WMS Tile Caching
Goal
The goal of a WMS Tile Caching proposal, perhaps WMS-C for short, is to find a way to optimize the generation of map imagery for transmission across the Internet. The proposal needs to offer ideally some means by which map clients can fetch tiles from existing servers, in such a way that the images can be cached on the server, or at an intermediate location, or even be completely pre-generated, if desired. Further, the proposal needs to offer a way of advertising that a cached tile set is available for a given layer from a particular WMS or WMS proxy. The proposal should leverage the existing investment in OGC-compliant WMS servers on the 'Net.
Proposal
WMS-C as WMS Profile
One approach to take might be to define WMS-C (as in Web Mapping Service - Cached) as a constrained profile of OGC WMS that permits servers to optimize their image generation, and allows tiles to be cached at intermediate points. A WMS-C service would likely only deliver images for bounding boxes aligned to a given rectangular grid, and only at particular scale levels.
The basic idea is that, unlike with WMS, two different requests for a given WMS-C tile should form the exact same HTTP GET request. This invites several constraints on WMS GetMap requests:
- Minimal query string arguments (i.e. no optional arguments permitted, versus §7.2)
- Fixed query string argument ordering and case (versus §6.4.1; q.v. also §7.2.2, Table 8)
- Fixed range of possible bounding boxes, computed from the WMS-C profile parameters
- Fixed precision on bounding box values (clarifying §6.5.6)
- Fixed tile size in pixels
- Fixed layer name and/or layer name ordering
- Fixed styling
- Fixed output format
Some means of identifying these constraints programmatically on a per-server basis, a la GetCapabilities might be desirable. From the table below, it appears that minimum/maximum scale (and scale quantization factor, which should probably never be other than 2) are the only suggested tiling regime parameters that would be difficult to directly express in a WMS GetCapabilities document. Is there some existing way to add custom parameters to a GetCapabilities declaration?
Note that the LAYERS, STYLES, SRS, HEIGHT, WIDTH, and FORMAT arguments to a GetMap request would become fixed for a particular WMS-C tiled layer, but the WMS specification would still require the inclusion of these arguments in every WMS-C request (§ 7.2).
A WMS-C proxy or server should be free to return an exception or a redirect, if it receives a WMS request that is not WMS-C compliant.
Calculating Valid Tile Extents for a Given Request
WMS tile caching implies fixed scale or zoom levels. Typically, each valid scale level would be half that of the next larger scale. It would be worth writing reference code to help developers figure out which tiles they need to load to cover a given bounding box at a given scale.
Possible Tile Scheme Parameters
Parameter | Default value | Specifiable in WMS GetCapabilities? |
Projection | EPSG:4326 | <SRS> |
Maximal extent | (-180,-90,180,90) | <BoundingBox> (§7.1.4.5.7) |
Number of horizontal and vertical tiles at the maximal extent | none | Could be implied by <ScaleHint> (§7.1.4.5.8, but note that the format is weakly specified) |
Tile size in pixels | some power of 2 | <Layer> attribute fixedWidth, fixedHeight (§7.1.4.6) |
Minimum scale | none | <ScaleHint> (see note, above) |
Scale quantization factor | 2 | ? |
Other Considerations
- Would non-rectangular tessellations yield more efficient results? If so, which tessellations to consider? Also, are the processing and bandwidth advantages of a non-rectangular tessellation outweighed by the potential implementation complexity?
Existing Tiling Schemes
- Mikel Maron's description of OnEarth's LandSat tiling scheme
- World Wind's tiling scheme: PDF, wiki
Related Projects
- osgPlanet
- NASA WorldWind (wiki)
- Community MapBuilder
- other AJAX map clients, presumably
Interested Parties
- Schuyler Erle
- Allan Doyle
- Norman Vine
- Josh Lieberman
- add yourself