2016-07-21 9 views
0

У меня есть код кэша, который пишет и читает, используя открытый слой 2, теперь Я обновляю наш открытый слой 3. Пожалуйста, помогитеОткрытый слой 3 имеет OL.Control.CacheWrite, как открытый слой 2, и если он недоступен сейчас, когда мы ожидаем, что он будет доступен в открытом слое 3

ответ

0

OpenLayers 3 использует другой подход. Вы можете настроить пользовательский tileLoadFunction для слоев плитки: вместо того, чтобы напрямую устанавливать src на Image, вы можете найти URL-адрес в предпочитаемом вами хранилище (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(); 
    } 
    } 
    // ... 
}); 
+0

На самом деле мы строим гибридное приложение и работаю над добавлением функциональности загрузки отсутствует плитка. Как мы можем получить доступ к локальным фрагментам на мобильном устройстве. Мы планируем загружать локальные плитки с SD-карты. Для открытия слоя SRc нужен адрес службы. –

+0

Вы используете 'getItem' и' setItem' в 'localStorage'. Как вы получаете доступ к плиткам на SD-карте, это другая история и зависит от платформы и ОС. – ahocevar