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 は、現在読み込まれているタイルが惑星のまったく別の場所からのものであると考え、それらをすべて破棄して最初からやり直しました。