Leaflet Fehlersuche bei markerClusterGroup()
Linuchs
- javascript
0 Gunnar Bittersmann0 JürgenB0 klawischnigg0 Linuchs
Moin,
ich habe mir eine ehemals funktionierende Anzeige zerschossen und bin nun auf Fehlersuche.
693 Shanty-Chöre sollen auf der Europa-Karte positioniert werden. In Clustern zusammengefasst, die sich beim Hineinzoomen auflösen.
PHP holt die Chöre aus der Datenbank und schreibt sie als CSV in das HTML Dokument. Jede CSV-Zeile soll ein Marker werden.
Die Marker werden einzeln der var markers = L.markerClusterGroup();
hinzugefügt und die schließlich der Karte map.addLayer(markers);
, erscheinen dort aber nicht. Keine Fehlermeldung.
Nun kontrolliere ich
console.log( "map typeof [" +typeof map +"]" );
console.log( "markers typeof [" +typeof markers +"]" );
console.log( "[" +markers.length +"] Elemente in markers" );
Ergebnis:
map typeof [object] remso.eu:1108:9
markers typeof [object] remso.eu:1109:9
[undefined] Elemente in markers remso.eu:1110:9
Wie kann ich kontrollieren, was in markers
enthalten ist?
Gruß, Linuchs
@@Linuchs
Zu deinem Problem bin ich noch nicht vorgedrungen, aber:
PHP holt die Chöre aus der Datenbank und schreibt sie als CSV in das HTML Dokument.
An dieser schlechten Entscheidung willst du festhalten?
Mir fallen nur zwei sinnvolle Datenformate als Schnittstelle ein: JSON oder XML.
console.log( "map typeof [" +typeof map +"]" ); console.log( "markers typeof [" +typeof markers +"]" ); console.log( "[" +markers.length +"] Elemente in markers" );
Das kann man auch lesbar schreiben:
console.log( `map typeof [${typeof map}]` );
console.log( `markers typeof [${typeof markers}]` );
console.log( `[${markers.length}] Elemente in markers` );
Wobei ich auf die eckigen Klammern verzichten würde.
😷 LLAP
An dieser schlechten Entscheidung willst du festhalten?
Es ist eine wohlüberlegte Entscheidung
Wobei ich auf die eckigen Klammern verzichten würde.
Hat sich bewährt, um fehlende Ergebnisse [] zu erkennen.
@@Linuchs
Wobei ich auf die eckigen Klammern verzichten würde.
Hat sich bewährt, um fehlende Ergebnisse zu erkennen.
Nun ja, eckige Klammern können sonstwo vorkommen. Ich würde dann an der Stelle andere Zeichen verwenden, bspw. spitze Klammern 〈〉.
😷 LLAP
Ich würde dann an der Stelle andere Zeichen verwenden, bspw. spitze Klammern 〈〉.
Probiere es selbst:
<p>A + B + C = <ABC></p>
Ergebnis:
A + B + C =
Ich kontrolliere auch PHP-Werte mit echo. Wieviele Leerstellen erkennst du im Ergebnis?
Hallo Linuchs,
Spaßvogel, 〈〉 und <> ist nicht das Gleiche 😉
Wenn Du schon die HTML Winkelklammern ausgeben willst, musst Du sie auch HTML-Escapen. Bei 〈 und 〉 (〈 und 〉) ist das nicht nötig.
Wenn es um das Zählen von Leerstellen geht, ist
echo "<pre>Debug 〈$a〉 Value</pre>"
hilfreich. Ist natürlich mehr Schreibaufwand.
Ob die eckigen Klammern für Dich sinnvoll sind oder nicht ist aber allein deine Entscheidung, du kennst deinen Kontext am besten.
Rolf
Hallo Rolf und Gunnar,
von gelangweilten Forums-Teilnehmern anderer Foren kenne ich das.
Du fragst, warum der Motor nicht anspringt und sie treten eine Diskussion los wie hoch der Luftdruck in den Reifen sein soll.
Ich könnte jetzt auch rumtrollen und fragen, wo die speziell-spitzen Klammern auf der Tastatur sitzen. Wenn der Motor dann anspringt, macht's ja Sinn.
Hallo Linuchs,
ja, die modernen Motoren der WAI-Klasse sind an AeRIA-Sensoren in den Reifen gekoppelt. Ist nicht genug drin, ist das Auto nicht bedienbar und sie springen erst gar nicht an 😉.
Aber ich hab mich doch nur über deine vorgetäuschte Naivität geäußert, dass Du HTML Spitzklammern und Gunnars Anglebrackets aus dem Unicode vermischt hast… Und dann noch <pre>Tipps zur Leerzeichenbetrachtung
</pre> nachgeliefert.
Rolf
@@Rolf B
Hallo Linuchs,
Spaßvogel, 〈〉 und <> ist nicht das Gleiche 😉
Eben. Wenn ich Kleiner-als- und Größer-als-Zeichen gemeint hätte, hätte ich das gesagt, nicht „spitze Klammern“.
(Und auch nicht „Winkelklammern“. 😉)
😷 LLAP
PS: Ist nicht <>
das Ungleich-Zeichen in manchen Programmiersprachen?
Also '〈〉' <> '<>'
?
Hallo,
Wie kann ich kontrollieren, was in markers enthalten ist?
ich würde mal
console.log( markers );
ausprobieren.
Gruß
Jürgen
Hallo Jürgen,
console.log( markers );
Habe ich eingebaut, ergibt zeilenweise cryptisches Zeug.
Gruß, Linuchs
Hallo Linuchs,
verwende einen anderen Browser, der liefert Dir einen Objektexplorer wenn Du ein Objekt mit console.log ausgibst.
Vielleicht enthält das Objekt auch tatsächlich nur Eigenschaften mit kryptischem Zeug drin.
Do kannst auch im Firefox an der relevanten Stelle einen Breakpoint setzen und das watch-Fenster verwenden.
Ich hoffe, du möchtest keinen eigenen Objekt-Dumper programmieren. Je nach Vererbungstiefe und Objektschachtelung kann das in Aufwand ausarten.
In vielen Fällen hilft console.log(JSON.stringify(obj, null, " "));
Wenn das Objekt in obj einen Prototypen hat, von dem es relevante Eigenschaften erbt, musst Du die Protottypenkette hochlaufen (mit Object.getPrototypeOf(obj)
) und von jedem Prototypobjekt die Eigenschaften ausgeben. Alles nicht so trivial…
Rolf
Hi,
Ich hoffe, du möchtest keinen eigenen Objekt-Dumper programmieren. Je nach Vererbungstiefe und Objektschachtelung kann das in Aufwand ausarten.
Lustig wird's,wenn das Geflecht Zyklen enthält (a la doppelt verketteter Liste mit previous- und next-Element-Referenzen in jedem Listenelement)
Und ggf. sind solche Zyklen nicht so offensichtlich …
cu,
Andreas a/k/a MudGuard
Hi there,
console.log( "[" +markers.length +"] Elemente in markers" );
Ergebnis:
[undefined] Elemente in markers remso.eu:1110:9
Wieso glaubst Du daß ein Objekt eine Länge hat?
Wie kann ich kontrollieren, was in
markers
enthalten ist?
Indem Du mit console.log(markers) in der Konsole nachschaust...
Wieso glaubst Du daß ein Objekt eine Länge hat?
Hatte an ein Array gedacht und erst später typeof abgefragt.