You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***

#1 2017-02-17 18:21:34

aromatiker
Member
Registered: 2009-05-16
Posts: 315

Leaflet: Kopieren Overlay

Hallo zusammen,

ich nutze Leaflet, um Karten mit Overlays darzustellen. Das geht nach Vorlage relativ einfach.

	var meinOverlay = L.layerJSON({ 
					...
					})

Wenn man jetzt allerdings mehrere fast gleiche Overlays (nur andere Quelle) benötigt, so artet das in ein massives cut&paste aus. Das ist fehlerträchtig und nicht besonders wartungsfreundlich.
Daher würde ich gerne - ausgehend von einer gut gefülltenOverlay-Vorlage - diese einfach kopieren und die notwendigen Eigenschaften (z.B. 'url') zuweisen.
Direkt kopieren geht mit js nicht.
Also habe ich in den Weiten des Internets und der papiernen Literatur gesucht und habe dort zwar Einiges gefunden:

var copy = Object.assign({}, meinOverlay);
var copy = completeAssign({}, meinOverlay);
var copy = $(meinOverlay).clone();
var copy = Object.create(meinOverlay);
// jetzt die geänderte Eigenschaft zuweisen
copy.url='neue_url';
meinOverlay.addTo(map);

Leider hat bei mir keine dieser Techniken funktioniert.

Hat mir jemand einen guten und funktionierenden Tipp, wie man es machen kann ?

Offline

#2 2017-02-17 19:26:52

dooley
Member
From: Landkreis Calw
Registered: 2013-11-04
Posts: 899

Re: Leaflet: Kopieren Overlay

Wenn du jQuery verwendest, kannst du mal

var kopierterLayer = $.extend(true, {}, originaLayer);

probieren (erster Parameter von extend: wenn true, dann deep clone). Oder ohne den deep clone-Parameter.
Ausprobiert hab ich das nicht, ich erzeuge meine Layer meist per Definition und entsprechender function.

Edit: Kannst auch mal nach den Leaflet-eigenen "Utilities" schauen: http://leafletjs.com/reference-1.0.3.html#util Da gibt es L.util.extend(destination, source), damit sollte es eigentlich auch gehen...

Last edited by dooley (2017-02-17 19:32:23)


Zum Zustand des deutschen Forums vom geschätzten Netzwolf auch "Pamphlet" genannt
Mein Avatar ist ein Ausschnitt aus "Die Saporoger Kosaken schreiben dem türkischen Sultan einen Brief" (Ilja Repin, gemeinfrei)

Offline

Board footer

Powered by FluxBB