OpenLayers Map每次平移或缩放时重绘图块(自定义XYZ图块层)

时间:2013-08-30 18:15:33

标签: openlayers

每次平移地图时都会丢弃并重新获取图层图块。

OpenLayers.Layer.Grid.moveTo中,它检查当前的图块边界并决定是否重新使用现有图块(通过moveGriddedTiles)或从头开始(通过initGriddedTiles)获取它们。由于图块边界不正确(它们有时看起来像是度数,有时看起来像是在错误的方向上变换 - 大约0.0015 ......)。

有没有人有任何关于从哪里开始寻找的线索?

1 个答案:

答案 0 :(得分:0)

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;
}

忘记克隆边界意味着我正在转换该tile的“官方”边界对象。下一次使用此边界对象时,确定当前加载的切片是否与新的地图边界相交,以确定是否应移动一些切片或将它们全部扔掉并获取新切片。由于它们被转换为不同的投影,OpenLayers认为当前装载的瓷砖来自行星的一个完全不同的部分,因此它将它们扔掉并重新开始。