每次平移地图时,都会导致图层切片被丢弃并重新获取。
在OpenLayers.Layer.Grid.moveTo
中,它检查当前瓦片边界并决定是重新使用现有瓦片(通过moveGriddedTiles
)还是从头开始获取它们(通过initGriddedTiles
)。由于瓦片边界不正确(它们有时看起来是度数,有时看起来它们已经向错误的方向转换 - 大约 0.0015...)。
有没有人知道从哪里开始寻找任何线索?
每次平移地图时,都会导致图层切片被丢弃并重新获取。
在OpenLayers.Layer.Grid.moveTo
中,它检查当前瓦片边界并决定是重新使用现有瓦片(通过moveGriddedTiles
)还是从头开始获取它们(通过initGriddedTiles
)。由于瓦片边界不正确(它们有时看起来是度数,有时看起来它们已经向错误的方向转换 - 大约 0.0015...)。
有没有人知道从哪里开始寻找任何线索?
事实证明,这是transform()
在我的自定义 getURL 函数中设置边界并首先忘记clone()
它们的问题。
this.layer = new OpenLayers.Layer.XYZ(
'layer description',
myBaseUrl + '&x=${x}&y=${y}&z=${z}',
{
name: 'layer name',
getURL: getMyTileUrl,
type: 'jpg',
minZoomLevel: 15,
maxZoomLevel: 18,
isBaseLayer: false,
transitionEffect: 'resize',
buffer: 3
}
);
function getMyTileUrl(bounds) {
bounds = bounds.transform(this.projection,"EPSG:4326");
// ...
return this.url + z + "/" + x + "/" + y + "." + this.type;
}
解决方案只是在转换边界之前克隆边界。
function getMyTileUrl(bounds) {
bounds = bounds.clone().transform(this.projection,"EPSG:4326");
// ...
return this.url + z + "/" + x + "/" + y + "." + this.type;
}
忘记克隆边界意味着我正在转换该图块的“官方”边界对象。下一次使用这个边界对象是确定当前加载的瓦片是否与新的地图边界相交,以确定我们应该移动一些瓦片还是将它们全部扔掉并获取新的瓦片。由于它们被转换为不同的投影,OpenLayers 认为当前加载的图块来自地球上完全不同的部分,因此将它们全部扔掉并重新开始。