2014-11-11 6 views
3

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

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

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

ответ

6

В OpenLayers 3, вы можете настроить источник плитки слоя с настраиваемой tileLoadFunction реализовать собственное решение для хранения данных:

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

map.geo.admin.ch Швейцарской Конфедерации порта связи с автономной поддержкой на мобильном устройства. Код, используемый для этого приложения, является открытым исходным кодом и размещен в github (github.com/geoadmin/mf-geoadmin3). Для своих возможностей хранения он использует смесь localstorage, IndexDB, WebSQL с помощью библиотеки localforage mozilla.

The storage implementation for map.geo.admin.ch is here как угловой сервис JS. Он используется в offline service для загрузки и хранения желаемых фрагментов. Затем вы можете просто использовать функцию tileLoadFunction от Andreas для перенаправления загрузки плиток из хранилища. Это также можно найти в автономной службе.

Depending on the browsers, the limits in terms of size still exist. Пожалуйста, обратитесь к документации по локальному документу.

Примечание: Мне не хватает кармы, чтобы разместить более двух ссылок. Google должен помочь.