2017-03-25 1 views
0

Ich habe Probleme, defaultStyle zu verstehen, wenn Sie ol.format.KML writeFeatures() verwenden. Die Features, die ich schreibe, haben keine individuellen Stile, daher möchte ich den Layerstil auf die KML-Features anwenden. Ich habe es versucht:KML-Format writeFeatures defaultStyle

var features = vectorLayer.getSource().getFeatures(); // these do not have styles 
var layerStyle = vectorLayer.getStyleFunction()(features[0], map.getView().getResolution()); 
var kmlFormat = new ol.format.KML({ 
    defaultStyle: layerStyle 
}) 

var kml = kmlFormat.writeFeatures(features, { 
    featureProjection: map.getView().getProjection() // source coord sys 
}); 
console.log(kml); 

Aber die kml hat kein Styling. Wenn ich den Ebenenstil jedes Merkmal kopieren:

features.forEach(function(feature) { 
    feature.setStyle(layerStyle); 
}); 

Dann hat die kml Styling, auch wenn ich {defaultStyle: layerStyle} entfernen. Aber ich würde es vorziehen, den Stil nicht von der Ebene in jedes einzelne Feature zu kopieren. Idealerweise hätte ich gerne, dass der kml den Stil der Ebene für Features hat, die nicht ihren eigenen Stil haben, und den Stil der Features für Stile verwenden, die ihren eigenen Stil haben.

Was macht defaultStyle und wann würde es verwendet werden?

OpenLayers docs

Vielleicht gilt defaultStyle nur KML auf Lesen, Schreiben nicht?

Antwort

2

KML unterscheidet sich von anderen Feature-Formaten. Es wurde entwickelt, um Funktionen mit Stilen zu tragen. Wenn Sie also KML schreiben, enden nur Stile, die Features zugeordnet sind, in der KML. Dies ist unabhängig von der Einstellung defaultStyle, die nur den für readFeatures zu verwendenden Stil konfiguriert, wenn für eine Funktion kein Stil konfiguriert ist.