Может ли 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 ссылок. Гугл должен помочь.