Leaflet - Funktion getLatLng() funktioniert plötzlich nicht - Gelöst

Ich bräuchte Hilfe bei einem JS-Leaflet-Problem, bei dem ich trotz Tutorial- und Forumssuche nicht weiterkomme.

Und zwar habe ich eine wunderbar funktionierende OSM-Karte, wo ich auf Klick einen neuen Marker hinzufügen kann und dessen Position auch angezeigt bekomme.

Der Aufruf erfolgt über

KarteWanderrevier.on('click', Platz);

Die Funktion, die funktioniert:

function Platz(e)
    {
     alert(\"hi. you clicked the marker at \" + e.latlng);
     L.marker(e.latlng,{draggable:'true'}).on('click', OrtSagen).addTo(KarteWanderrevier);
     }

Wenn ich aber versuche, die Koordinaten über getLatLng() zu bekommen:


function Plaetz(e)
	{
	var Plaetze = e.target;
	var NeuOrt = Plaetze.getLatLng();	
        }

Meldet mir die Konsole:

leaflet.js ist aber korrekt eingehängt, sonst würde der Rest nicht funktionieren.
Auch auf einer anderen Seite klappt es, z.B. so:

function PosAendern(e)
			{
			var Platz = e.target;
			var NeuOrt = Platz.getLatLng();	
			document.getElementById('nordost').value = NeuOrt.lat + ', ' + NeuOrt.lng;	
			}

Ich komme schlicht nicht drauf, für eine Idee wäre ich dankbar :slight_smile:

LG
Chnutz

Kannst du bitte erstmal deine Schreibfehler korrigieren? Im Code ist von “Plaetze” die Rede in der Consolenausgabe aber von “Platz”?!

Nachtrag: Ansonsten geb doch einfach mal e und e.target in der console aus, dann sagt dir der Browser im Normalfall auch, um was für einen Type es sich handelt, ob es z.B. wirklich ein Leaflet.Marker ist…

Ich soll den Konsoleneintrag korrigieren?!

:wink:
(Der Konsoleneintrag war noch der alte, den neuen hatte ich nicht mehr herauskopiert.
Den Namen hatte ich geändert, da Variable und Funktion vorher versehentlich den gleichen Namen hatten. Ändert aber nichts am Verhalten - doch die Verwirrung darüber sollte jetzt verschwunden sein, Pardon dafür :slight_smile: )

Danke für die Idee, habe ich nun gemacht, hier das Ergebnis:
e und e.target haben identische Typen:

Zum Vergleich habe ich mal einen Marker loggen lassen:

Allerdings ist e doch auch gar kein Marker sondern ein Event, oder?! Siehe hier: http://leafletjs.com/reference-1.3.0.html#event-objects
Vor allem irritiert mich bei der Sache, das e ganz offensichlich auch die Geokoordinaten des angeklickten Punktes transportiert, der Alert im ersten Beispiel gibt z.B. für e.latlng aus:

Irgendwie müssen diese Koordinaten doch als (Einzel-)Variablen zu extrahieren sein?! :roll_eyes:

Ich meinte die Ausgabe von typeof, damit man sieht, um welches Objekt es sich genau handelt.

Und ja, wenn du bei deinem Link etwas weiterliest, siehst du, dass das MouseEvent um latlng vom type LatLng erweitert wird und du dann auch direkt e.latlng.lat oder e.latlng.lon verwenden können solltest… wenn es sich denn auch wirklich um ein MouseEvent handelt.

Ich habe zwar noch nicht ganz verstanden, warum, doch ist bei diesem Event GET auf e.target nicht mehr notwendig.
Mit

var Laenge = e.latlng.lng;
var Breite = e.latlng.lat;

habe ich nun die gewünschten Koordinaten bekommen. Der Tipp von Harald Hartmann hat mich dahin weiterdenken lassen, Danke nochmal!

Edit: Hatte ich eben schon selbst herausgefunden durch Deinen Hinweis, jetzt hast Du es auch geschrieben :wink:

Wenn noch jemand eine Erklärung hätte, warum manchmal erst ein GET auf e.target notwendig ist und hier nicht, wäre ich dankbar, aber zumindest praktisch ist damit mein Problem gelöst! :slight_smile:

Naja, deswegen war ja meine Frage die ganze Zeit, was du wirklich für Events erhälts, und was in den targets steckt. Wenn du die Doku durchliest, wirst du sicherlich feststellen, dass wenn du z.B. einen Marker im target hast, dann wieder per getLatLng zugreifen musst.

Ah, jetzt habe ich es verstanden!

Mein Irrtum war, dass, wenn ich einen Marker mit der Maus ziehe, es auch als Mouseevent gilt. Dem ist aber nicht so, es ist ein allgemeines Event, deshalb brauche ich dort “target”.

Schön, gelöst in Theorie UND Praxis :slight_smile:

Danke!