Mehr

Das benutzerdefinierte OpenLayers 3-Steuerelement erhält das Kartenobjekt nicht

Das benutzerdefinierte OpenLayers 3-Steuerelement erhält das Kartenobjekt nicht


Ich habe mit erweiterten Steuerelementen in OpenLayers 3 herumgespielt. Ich habe ein Steuerelement gebaut, das ein Legendenbild von einem Mapserver mit einer GetLegendGraphics-Anfrage holt. Wenn ich das Steuerelement jedoch zur Karte hinzufüge, wird dasKarteObjekt wird nicht an das Steuerelement übergeben. Ich denke, die Vererbung funktioniert gut, weil das Steuerelement eingetMap()Funktion, aber sie kehrt zurücknicht definiert. Hat jemand eine Idee was ich falsch mache?

Code:

var ol3_legend = Funktion(e) { var Optionen = e || {}; var wmsVersion = options.wmsVersion || '1.3.0'; var format = options.format || 'bild/png'; var legendP = document.createElement('p'); legendP.innerHTML = 'Legende:'; var legendDiv = document.createElement('div'); legendDiv.className = options.class + ' ol-unselectable'; legendDiv.appendChild(legendP); var-Schichten = this.getMap().getLayers().getArray(); für (var i=0;i

Ausgabe:

Uncaught TypeError: Die Eigenschaft 'getLayers' von undefined kann nicht gelesen werden

Problemumgehung (nur die geänderten Zeilen):

var-Ebenen = options.map.getLayers().getArray(); ol3_map.addControl(new ol3_legend({ map: ol3_map, class: 'ol_legend' }));

Das Problem ist, dass ich das Map-Objekt bereitstellen muss, was Einschränkungen macht, wenn ich den Code später wiederverwenden möchte.

Geige arbeiten.


Das Problem ist, dass Sie verwendengetMap()im Konstruktor Ihres Steuerelements. Aber in dem Moment, in dem Sie das Steuerelement instanziieren, wird es der Karte noch nicht hinzugefügt. So,getMap()gibt undefiniert zurück.

Sie können überschreibensetMap(Karte)in Ihrer Steuerung, die bei der Ausführung von der Karte aufgerufen wirdmap.setControl().

ol3_legend.prototype.setMap = Funktion (Karte) { ol.control.Control.prototype.setMap.call (diese Karte); Konsole.log(Karte); };

Schau das Video: OpenLayer