2014-01-11 26 views
0

我需要通過OpenLayers.Protocol.HTTP在OpenLayers中加載一個zip文件。我想加載它,並在jszip的幫助下解壓縮它。由於我想加載二進制數據,我必須更改XMLHttpRequest的mimeType。一個jszip例子說,它的工作原理是這樣的:在OpenLayers中通過XMLHttpRequest加載二進制數據

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

不幸的是,XMLHttpRequest類的OpenLayers用途(OpenLayers.Request.XMLHttpRequest)沒有overrideMimeType功能。當我嘗試在不設置MIME類型的情況下解壓加載的數據時,出現「到達數據結束(數據長度= 23798955,索引= 24968701)。損壞的zip?」,因此它看起來沒有正確加載zip 。任何建議如何解決這個問題?

回答

1

Openlayer中的限制很可能是有意實現的,因爲所有瀏覽器都不支持JavaScript的二進制請求(猜測哪一個不符合它)。

您不需要使用OpenLayer的HTTP功能來加載數據。 用你最喜歡的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)); 
相關問題