2017-08-31 2 views
1

die neueste Version von Openlayers verwenden, 4.3.1, habe ich eine Vektorquelle wie folgt:Wie ein vectorSource laden, ohne XHR

this.vectorSource = new ol.source.Vector({ 
     url: `../assets/data/file.json`, 
     format: new ol.format.TopoJSON() 
    }); 

    this.vector = new ol.layer.Vector({ 
     source: this.vectorSource, 
     style: this.style 
    }); 

Aber die Datei, in einigen Fällen eine frühere treatement durch andere Funktion benötigt. Wie kann ich file.json laden, ihn behandeln und in ol.source.vector verwenden?

ich mit einer Antwort Ajax versucht, zu, wo dataSource Variable eine Antwort von Ajax-Aufruf zu gleichen URL im ersten Beispiel ../assets/data/file.json

vectorSource = new ol.source.Vector({ 
     features: (new ol.format.TopoJSON()).readFeatures(dataSource) 
     }); 

Antwort

1

ist, kann diese ganz einfach durchgeführt werden. Konfigurieren Sie die ol.source.Vector ohne URL. Stattdessen können Sie Ihre json selbst laden und es in ein Objekt mit

var json = JSON.parse(dataSource); 

dann das JSON-Objekt ändern, und rufen schließlich

var features = new ol.format.TopoJSON().readFeatures(dataSource, 
    {featureProjection: view.getProjection()}); 
vectorSource.addFeatures(features); 

Hinweis die featureProjection-Option, die es sei denn Ihrer Ansicht nach erforderlich ist, hat die gleiche Projektion wie Ihre Datenquelle.

+0

Aber in der neuesten Version hat die ['readFeatures'] (http://openlayers.org/en/latest/apidoc/ol.format.TopoJSON.html#readFeatures) -Methode nur eine Argumente –

+0

Das ist nicht wahr. Siehe http://openlayers.org/en/v4.3.2/apidoc/ol.format.GeoJSON.html#readFeatures. – ahocevar

Verwandte Themen