开放层3是否具有OL.Control.CacheWrite,就像开放层2一样,如果它现在不可用,我们期望在开放层3中可用

时间:2016-07-21 12:38:39

标签: openlayers openlayers-3

我有使用开放层2的缓存写入和读取代码,现在我正在升级我们的开放层3。请帮忙

1 个答案:

答案 0 :(得分:1)

OpenLayers 3使用不同的方法。您可以为切片图层配置自定义tileLoadFunction:您可以直接在src上设置Image,而不是在首选存储中查找网址(LocalStorage,IndexDB,... ),并在可用时获取它,或者如果你想存储它。

这样的事情:

new ol.source.TileImage({
  tileLoadFunction: function(tile, src) {
    // try to fetch from local storage
    var dataURI = localStorage.getItem(src);
    if (dataURI) {
      // use cached version
      tile.getImage().src = dataURI;
    } else {
      // load image data
      var client = new XMLHttpRequest();
      client.open('GET', src);
      client.onload(function() {
        var data = 'data:image/png;base64,' +
            btoa(unescape(encodeURIComponent(this.responseText));
        // use the image data we just loaded
        tile.getImage().src = data;
        // save image data to the cache for later reuse
        localStorage.setItem(src, data);
      });
      client.send();
    }
  }
  // ...
});