Linuchs: Leaflet Fehlersuche bei markerClusterGroup()

problematische Seite

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

  1. problematische Seite

    @@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

    --
    „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
    — Joachim Gauck über Impfgegner
    1. problematische Seite

      An dieser schlechten Entscheidung willst du festhalten?

      Es ist eine wohlüberlegte Entscheidung

      • eine kürzere unkomprimierte Datenübertragung kenne ich nicht
      • CSV kann problemlos in Kalkulationsprogramme importiert werden

      Wobei ich auf die eckigen Klammern verzichten würde.

      Hat sich bewährt, um fehlende Ergebnisse [] zu erkennen.

      1. problematische Seite

        @@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

        --
        „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
        — Joachim Gauck über Impfgegner
        1. problematische Seite

          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?

          1. problematische Seite

            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 〉 (&#9001; und &#9002;) ist das nicht nötig.

            Wenn es um das Zählen von Leerstellen geht, ist

            echo "<pre>Debug &#9001;$a&#9002; 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

            --
            sumpsi - posui - obstruxi
            1. problematische Seite

              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.

              1. problematische Seite

                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

                --
                sumpsi - posui - obstruxi
            2. problematische Seite

              @@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 '〈〉' <> '<>'?

              --
              „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
              — Joachim Gauck über Impfgegner
  2. problematische Seite

    Hallo,

    Wie kann ich kontrollieren, was in markers enthalten ist?

    ich würde mal

    console.log( markers );
    

    ausprobieren.

    Gruß
    Jürgen

    1. problematische Seite

      Hallo Jürgen,

      console.log( markers );

      Habe ich eingebaut, ergibt zeilenweise cryptisches Zeug.

      Gruß, Linuchs

      1. problematische Seite

        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

        --
        sumpsi - posui - obstruxi
        1. problematische Seite

          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

  3. problematische Seite

    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...

    1. problematische Seite

      Wieso glaubst Du daß ein Objekt eine Länge hat?

      Hatte an ein Array gedacht und erst später typeof abgefragt.