Может ли OpenLayers 3 использовать WebSQL или IndexedDB для кэширования фрагментов карты

Я использую OpenLayers 3, и все автономные примеры, которые я видел, включают только localStorage для сохранения и извлечения фрагментов карты. Проблема в том, что localStorage ограничен примерно 5 мегабайтами, что слишком мало для моего приложения.

Если бы вместо этого я использовал Leaflet, я мог бы расширить L. TileLayer, написав свое собственное решение для хранения в функции getTileUrl.

Есть ли что-то подобное в OpenLayers 3? Я бы очень хотел использовать IndexedDb или даже WebSQL поверх localStorage.

2 ответа

Решение

В OpenLayers 3 вы можете настроить источник слоя листов с помощью настраиваемой функции tileLoad для реализации собственного решения хранения:

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-geoadmin3). Для своих возможностей хранения он использует смесь localalstorage, IndexDB и WebSQL, используя библиотеку localforage mozilla.

Реализация хранилища для map.geo.admin.ch находится здесь как сервис angularJS. Он используется в автономном режиме для загрузки и хранения нужных плиток. Тогда вы можете просто использовать функцию AndreL's tileLoadFunction, чтобы перенаправить загрузку плиток из хранилища. Это также можно найти в автономном режиме.

В зависимости от браузеров, ограничения по размеру все еще существуют. Пожалуйста, обратитесь к документации местного корма о деталях.

Примечание: у меня недостаточно кармы, чтобы разместить более 2 ссылок. Гугл должен помочь.

Другие вопросы по тегам