Serving Layers From Pre-Cached ArcGIS Tiling Schemes¶
GeoWebCache offers the possibility of serving cached tiles created by ArcGIS Server 9.2, 9.3 and 10.0, as long as the ArcGIS cache is in the so called “exploded format”, and not in the “compact format” introduced in ArcGIS Server 10. This is so because the compact storage format uses a legacy file format to store multiple tiles inside a single file, but it’s structure is not published by ESRI.
Features and Limitations¶
GeoWebCache can publish pre-generated caches in ArcGIS exploded format, it cannot seed or truncate these layers. So if you have a set of cached Layers created with ArcGIS Server, you can publish them using GeoWebCache as WMS-C Layers without needing to have ArcGIS Server running at all.
Also, GeoWebcache supports only fused ArcGIS caches. That is, caches that contain a single tile set for all the layers in the cached ArcGIS Map.
ArcGIS Tiling Scheme¶
The file structure of such caches is as follows:
In this example, the arcgiscache
folder is the root of the ArcGIS Server cache directory. It contains two cached layers: naturalearth
and World_Reference_Overlay
. Each of them contains a Layers
folder which in turn has two files: conf.xml
and conf.cdi
, and an _allLayers
folder.
In ArcGIS terminology, each of these cached layers constitutes “fused caches”, since there’s a single _allLayers
folder holding the tile files for all the overlaid layers composing that “Map”.
The conf.xml
XML file contains the ‘ArcGIS Tiling Scheme’ definition, containing information about the Layer’s Coordinate Reference System, the ‘tileOrigin’, and tile dimensions, the tiles image format, and the list of zoom levels defined by a pair of equivalent resolutions and scale denominators, among other information.
The conf.cdi
file is an accompanying XML file that defines the actual bounding box of the Layer cached by this tile set.
The structure of the “conf.cdi” file is as follows:
<EnvelopeN>
<XMin>-180</XMin>
<YMin>-90</YMin>
<XMax>180</XMax>
<YMax>90</YMax>
</EnvelopeN>
Note
GeoWebCache will need those two files to automatically create a GridSet and GridSubset for this Layer. If your cache doesn’t come with a conf.cdi
file (ArcGIS Server versions prior to 10.0) you’ll need to create one by hand and place it next to conf.xml
, so that GeoWebcache can map that to its internal representation of the gridded set of tiles.
Configuration¶
An ‘arcgisLayer’ element needs to be created in geowebcache.xml
under the ‘layers’ section. ‘wmsLayer’ definitions and ‘arcgisLayer’ definitions can be intermixed.
This is an example geowebcache.xml
fragment showing how to set up such a cached Layer:
<gwcConfiguration>
<gridSets>
</gridSets>
<layers>
<wmsLayer></wmsLayer>
<arcgisLayer>
<name>naturalearth</name>
<tilingScheme>C:\\arcgiscache\\naturalearth\\Layers\\conf.xml</tilingScheme>
</arcgisLayer>
</layers>
</gwcConfiguration>
The ‘name’ element is the Layer name GeoWebcache will publish the ArcGIS cache for that layer with.
The ‘tilingScheme’ element expects the full path to the cache’s conf.xml
file.
Alternative cache directory¶
It is also possible to get rid of the standard tiling scheme layout and separate out the location of the conf.xml file and the directory that actually holds the tiles, by using the tileCachePath
property:
<arcgisLayer>
<name>naturalearth</name>
<tilingScheme>C:\\arcgiscache\\naturalearth\\Layers\\conf.xml</tilingScheme>
<tileCachePath>D:\\arcgistiles\\naturalearth\\</tileCachePath>
</arcgisLayer>
Levels hex-encoded¶
Configure whether or not the z-values (levels) should be hex-encoded or not by using the hexZoom
property. Default to false (decimal).
<arcgisLayer>
<name>naturalearth</name>
<tilingScheme>C:\\arcgiscache\\naturalearth\\Layers\\conf.xml</tilingScheme>
<hexZoom>true</hexZoom>
</arcgisLayer>
OpenLayers Configuration¶
One particularity of ArcGIS Tiling Schemes is that they define an explicit cache tile origin as an X/Y coordinate in the cache’s Coordinate Refernce System, that is located at the top left of the tiling scheme valid coordinate range. Since both GeoWebCache and OpenLayers by default compute tile bounding boxes based on the bottom left GridSet envelope corner, it is necessary to instruct OpenLayers to use an explicit ‘tileOrigin’ for each Layer served off an ArcGIS Tiling Scheme.
The GeoWebCache demo pages for this kind of Layers do that automatically.
To set up an OpenLayers WMS layer that access an ArcGIS cache through the GeoWebCache WMS interface, use the Layer’s tileOrigin property as in the following example:
var demolayer = new OpenLayers.Layer.WMS("naturalearth","../service/wms",
{layers: 'naturalearth', format: 'image/png' },
{ tileSize: new OpenLayers.Size(256,256),
tileOrigin: new OpenLayers.LonLat(-180.0, 90.0)});
map.addLayer(demolayer);
And make sure the ‘tileOrigin’ property matches the tile origin defined in conf.xml
.
Note
The OpenLayers tileOrigin property is new and available since revision #11033 in svn. This new functionality will be available in OpenLayers 2.11, which at the time of writing is not yet released. The OpenLayers version that comes with GeoWebCache already contains the needed patch.