2014-01-11 2 views
0

Мне нужно загрузить zip-файл в OpenLayers через OpenLayers.Protocol.HTTP. Я хочу загрузить его и разархивировать с помощью jszip. Поскольку я хочу загрузить двоичные данные, мне нужно изменить mimeType XMLHttpRequest. Jszip пример говорит, что это работает так:Загрузка двоичных данных через XMLHttpRequest в OpenLayers

var xhr1 = new XMLHttpRequest(); 
    xhr1.open('GET', '../test/ref/text.zip', true); 
    if (xhr1.overrideMimeType) { 
    xhr1.overrideMimeType('text/plain; charset=x-user-defined'); 
    } 

    xhr1.onreadystatechange = function(e) { 
    if (this.readyState == 4 && this.status == 200) { 
     var zip = new JSZip(this.responseText); 
     var elt = document.getElementById('xhr1_way'); 
     elt.innerHTML = "<p>loaded ! (as a " + (typeof this.responseText) + ")</p>"; 
     elt.innerHTML += "<p>Content = " + zip.file("Hello.txt").asText(); 
    } 
    }; 

К сожалению OpenLayers класса использует XMLHttpRequest (OpenLayers.Request.XMLHttpRequest) не имеет функции overrideMimeType. Когда я пытаюсь разархивировать загруженные данные без установки типа mime, я получаю сообщение об ошибке «Конец достигнутых данных (длина данных = 23798955, указана index = 24968701). Поврежденный zip?», Поэтому похоже, что почтовый индекс загружен неправильно , Любые предложения по решению этой проблемы?

ответ

1

Ограничение в Openlayer, скорее всего, реализовано специально, потому что двоичный запрос из JavaScript просто не поддерживается всеми браузерами (угадайте, какой из них не подходит).

Для загрузки данных не требуется использовать возможности HTTP OpenLayer. Сделайте свой запрос со своей любимой картой JS (here is an example), а затем загрузите данные любым типом данных, которые вы используете.

var zip = new JSZip(this.responseText); 
var jsonFormat = new OpenLayers.Format.JSON(); 
var jsonData = jsonFormat.read(zip.file("Hello.txt").asText()); 
var gson = jsonData.somewhere.is.my.gson; 
var layer = new OpenLayers.Layer.Vector(); 
map.addLayer(layer); 
layer.addFeatures(geojson_format.read(gson)); 
Смежные вопросы