OpenLayers 3可以使用WebSQL或IndexedDB来缓存映射瓦片吗

Can OpenLayers 3 use WebSQL or IndexedDB to cache map tiles

本文关键字:映射 缓存 IndexedDB 可以使 WebSQL OpenLayers      更新时间:2023-09-26

我使用的是OpenLayers 3,我看到的所有离线示例都只包括用于保存和检索地图瓦片的localStorage。问题是localStorage被限制在大约5兆字节,对于我的应用程序来说太小了。

如果我使用的是Leaflet,我可以通过在getTileUrl函数中编写自己的自定义存储解决方案来扩展L.TileLayer。

在OpenLayers 3中有合适的东西吗?我真的很想在localStorage上使用IndexedDb甚至WebSQL。

在OpenLayers 3中,您可以使用自定义tileLoadFunction配置tile层源,以实现您自己的存储解决方案:

new WhateverTileSource({
  tileLoadFunction: function(imageTile, src) {
    var imgElement = imageTile.getImage();
    // check if image data for src is stored in your cache
    if (inCache) {
      imgElement.src = imgDataUriFromCache;
    } else {
      imgElement.onload = function() {
        // store image data in cache if you want to
      }
      imgElement.src = src;
    }
  }
});

map.geo.admin.ch的瑞士联邦通信,在移动设备上提供离线支持。该应用程序使用的代码是开源的,托管在github(github.com/geoadmin/mf-loadmin3)上。对于其存储功能,它使用mozilla的localforge库混合使用localstorage、IndexDB和WebSQL。

map.geo.admin.ch的存储实现是作为angularJS服务提供的。它在离线服务中用于下载和存储所需的磁贴。然后,您可以简单地使用Andreas的tileLoadFunction来重定向从存储中加载瓦片。这也可以在离线服务中找到。

根据浏览器的不同,大小方面的限制仍然存在。有关详细信息,请参阅当地饲料文件。

注意:我没有足够的因果报应发布2个以上的链接。谷歌应该提供帮助。