Mehr

So erstellen Sie Ordner beim Exportieren von OL nach KML

So erstellen Sie Ordner beim Exportieren von OL nach KML


Ich habe diese Funktion, die alle geplotteten Features auf meiner OpenLayers (2.6)-Karte exportiert, indem ich dieOpenLayers.Format.KMLwie folgt:

var featuresToExport = []; for (var i = 0; i < MAP.__layers.length; i++) { if (MAP.__layers[i].getVisibility() && MAP.__layers[i].features != null) { for(var j = 0 ; j < MAP.__layers[i].features.length; j++){ featuresToExport.push(MAP.__layers[i].features[j]); } } } var format = new OpenLayers.Format.KML({ 'maxDepth':10, 'extractStyles': true, 'extractAttributes': true, 'extractTracks': false, 'internalProjection': MAP.__map.baseLayer.projection, 'externalProjection': new OpenLayers.Projection("EPSG:4326") }); var kml = format.write(featuresToExport);

Auf diese Weise werden alle Funktionen in der KML auf die gleiche Ebene gestellt. Ich möchte sie in Ordnern anordnen können, zum Beispiel für jede Ebene.

Wie kann ich das machen? DasschreibenFunktion schreibt immer die komplette KML-Struktur, sonst könnte ich so etwas machen:

for (var i = 0; i < MAP.__layers.length; i++) { if (MAP.__layers[i].getVisibility() && MAP.__layers[i].features != null) { featuresToExport = []; kml += "Ebene " + i + ""; for(var j = 0; j < MAP.__layers[i].features.length; j++){ featuresToExport.push(MAP.__layers[i].features[j]); } // diese Features schreiben kml + = format.write(featuresToExport); kml += ""; } }

Ok, in Ermangelung einer besseren Lösung schneide ich einfach die gewünschten Teile aus und ordne die Hierarchie neu an.

var kml = ""; kml += "Mein ExportEinige Beschreibung"; var layerString = ""; // Features in einen KML-String schreiben für (var i = 0; i < MAP.__layers.length; i++) { if (MAP.__layers[i].getVisibility() && MAP.__layers [i].features != null) { featuresToExport = []; kml += "Ebene " + i + ""; for(var j = 0; j < MAP.__layers[i].features.length; j++){ featuresToExport.push(MAP.__layers[i].features[j]); } // diese Features schreiben layerString = format.write(featuresToExport); kml += layerString.match("(.*)")[1]; kml += ""; } } kml += "";

Bearbeiten: Besser als das ist, jQuery.parseXML zu verwenden und mit den DOM-Objekten anstelle von Strings zu arbeiten.

layerString = format.write(featuresToExport); layerDOM = $.parseXML(layerString); layerDOM = $(layerDOM).find("Ordner")[0];