数据准备
使用ArcGIS发布地图,并切图得到松散的缓存瓦片数据,一般存储路径为:C:\arcgisserver\directories\arcgiscache
使用ArcGIS10.2之前的ArcGIS Server数据目录可能不一样,请自己找到arcgiscache 文件夹。
本实例使用的缓存配置如下图:
发布数据
本步骤主要目的是将ArcGIS缓存的瓦片发布的到服务器上,使外网可以访问到瓦片数据。
将缓存路径发布的IIS上(路径为:http://localhost:9999),如下图:
加载缓存类(该类可以加载任何ArcGIS发布的数据)
关键步骤就是重现getURL()方法,当地图刷新的时候可以找到服务器中切片存放的路径。
OpenLayers加载缓存文件的代码如下: OpenLayers.Layer.ESRICache = OpenLayers.Class(OpenLayers.Layer.TMS, {
tileOriginCorner: 'tl',
type: 'png',
initialize: function (name, url, options) {
OpenLayers.Layer.TMS.prototype.initialize.apply(this, [name, url,options]);
},
getURL: function (bounds) {
var z = map.getZoom();
var res = map.getResolution(z);
var x = parseInt((bounds.getCenterLonLat().lon - this.tileOrigin.lon) / (256 * res));
var y = parseInt((this.tileOrigin.lat - bounds.getCenterLonLat().lat) / (256 * res));
x = 'C' + OpenLayers.Number.zeroPad(x, 8, 16);
y = 'R' + OpenLayers.Number.zeroPad(y, 8, 16);
z = 'L' + OpenLayers.Number.zeroPad(z, 2, 10);
return this.url + z + '/' + y + '/' + x + '.' + this.type;
},
});
初始化地图图层:
var esri = new OpenLayers.Layer.ESRICache("ArcGIS缓存", 'http://localhost:9999/',
{
resolutions: [
0.01903568804664224,
0.00951784402332112,
0.00475892201166056,
0.00237946100583028,
0.00118973050291514
],
maxExtent: [103.59974, 24.621635, 109.55483, 29.224079],
tileOrigin: new OpenLayers.LonLat(-400, 400)
});
map = new OpenLayers.Map('map', {
projection: "EPSG:4326",
displayProjection:"EPSG:4326",
//maxExtent: [103.59974, 24.621635, 109.55483, 29.224079],
controls:[]
});
map.addLayer(esri);