Interaktive Weltkarte mit Leaflet

  • Ich versuche ja gerade, meine Welten-Website basierend auf Obsidian.md, einem Markdown-Editor, neu aufzusetzen (aus dem ich dann html exportiere).


    Es gibt ein leaflet-Map-Plugin für Obsidian, mit dem man eine "interaktive" Map dort einbinden kann. Also da kann man rein- und rauszoomen und Marker setzen, die wiederum bei Klick ein Popup über den markierten Ort anzeigen können. Schön. ABER: Das lässt sich nicht zu einer Website exportieren. Das Plugin funktioniert im Editor selbst ganz gut - also wer mit Obsidian arbeiten möchte und gar keine Website daraus generieren möchte, bitte sehr: https://github.com/javalent/obsidian-leaflet (findet man auch aus Obsidian heraus, wenn man dort nach "externen" Plugins sucht).


    Ich habe dann versucht, stattdessen die Map nachträglich mit dem regulären leaflet.js in die exportierte html-Seite einzubinden. An sich funktioniert das ... theoretisch. Also ich habe sie zoombar und kann auch Marker setzen etc.


    Leider wird das Script anscheinend erst nach Reload (sei es Refresh per F5 oder einem automatisierten Reload der Seite, wo ich aber nicht rausgefunden habe, wie ich das notfalls nur einmalig direkt beim Laden der Seite tun könnte, um auf hässliche Weise das Problem zu umgehen ...) der betreffenden Seite tatsächlich geladen. Vorher wird weder die Map, noch die Steuerelemente angezeigt. Und so ist das natürlich komplett unbrauchbar.


    Da es nach Refresh ja funktioniert, habe ich leider überhaupt keine Idee, woran das liegen und wie ich es fixen könnte. :'(


    Auf Stackoverflow gibts ein paar Threads zu ähnlichen Themen, aber keiner der da genannten Ansätze funktioniert. Die beziehen sich natürlich auch alle nicht auf die Kombination mit einem aus Obsidian exportierten html-file, dessen Code sicher nicht so clean ist, wie er sein könnte. Also ich kann nur vermuten, dass irgendwas aus diesem Code dazwischenfunkt. Irgendwelche Pfade & Serversettings werden es ja wohl nicht sein, wenn es nach Reload funktioniert ...?


    Testen tu ich das ganze übrigens via VSCode mit Five Server, also mit einem lokalen Webserver (sonst wird die exportierte html-Seite nicht korrekt dargestellt). Auf meinem Webspace verhält sich das genauso, es ist also eine zuverlässige Vorschau des Problems.


    Kennt sich hier irgendwer noch mit aktueller Webentwicklung aus und hat ne Idee, wie ich so ein Problem lösen könnte? Leider zeigt Firefox mir in seinem Webentwickler-Tool keine Fehlermeldungen dazu an.

  • Yrda

    Changed the title of the thread from “Interaktive Weltkarte mit Leaflet (leider kein Tutorial)” to “Interaktive Weltkarte mit Leaflet - Hilfeschrei”.
  • Ich nicht :-X als damals NoScript noch umging, hab' ich Javascript gemieden. In php hab ich jetzt aber gestern zum ersten Mal reingeschaut. Mal schaun ob ich das irgendwie nutzen kann.


    Hmm, ansonsten würde ich versuchen sowas ChatGPT zu erklären, manchmal kommt da was gescheites bei rum. <.<

  • Ich bin seit 4 Jahren komplett raus aus dem Thema, und hab's auch davor schon ziemlich schleifen lassen. Bin bei etwas derart Komplexem entsprechend herzlich wenig zu gebrauchen :(

    Bring me your soul, bring me your hate
    In my name you will create
    Bring me your fear, bring me your pain
    You will destroy in my name

    - Les Friction, Dark Matter

  • Ich hab eine Weile nix mit JS mehr gemacht, aber meine zoombare Seliaris-Karte mit Popups fliegt wo rum, die ist zu einem guten Teil Eigenbau. Vielleicht hol ich die übern Sommer mal aus der Mottenkiste.

    Leider hat das aber nicht viel mit leaflet gemeinsam, aber vielleicht kann ich trotzdem helfen. Hab halt derzeit kaum Zeit, hier stapeln sich die Geburtstage.

    Man kann gar nicht so rundum stromlinienförmig sein, dass es nicht irgendeine Pappnase gibt, die irgendetwas auszusetzen hat.
    - Armin Maiwald

  • Kannst du das mal irgendwo hochladen? Dann würd ich bei Gelegenheit mal schauen.

    Man kann gar nicht so rundum stromlinienförmig sein, dass es nicht irgendeine Pappnase gibt, die irgendetwas auszusetzen hat.
    - Armin Maiwald

  • Hochgeladen ist es tatsächlich unter https://www.yrdanea.de/kompendium - Klick auf Kartenwerk > Weltkarte der Vergangenheit, um das Elend zu sehen. Dann Reload, um die Karte in Aktion zu sehen. Navigiert man von der Karte wieder woanders hin und dann wieder zurück zur Karte, ist es wieder kaputt.


    Aktuell sind das einfach nur ein paar beispielhafte Obsidian-Notes, da ich mich gerade auf dieses Kartenproblem konzentriere. Separat funktionierte das Ding auch, nur halt nicht in genau dieser Umgebung zusammen mit den anderen Scripten.


    Ein Script ist zB über 300 Zeilen groß und auf eine Zeile minified. Aber ich konnte nicht rausfinden, ob das der "Schuldige" ist. Oder ob mein Script einfach irgendwelche Eigenschaften braucht, um mit den anderen Sachen im Zusammenspiel auf Anhieb funktionieren zu können.


    Aus dem generierten Mega-Bandwurm-Script (was nichts mit Leaflet zu tun hat) ergeben sich 33 Fehler oder so. Die habe ich bei mir lokal schon behoben, aber das hat keinen Effekt auf mein Problem.

  • Ich weiß nicht wieso, aber der Inspektor sieht da einen Unterschied.


    Beim ersten Laden, wenn's nicht funktioniert:


    Beim zweiten Laden dann hat die div allerlei Klassen und auch ein paar HTML-Knoten da drin:




    oh, vermutlich wird das alles vom Script eingefügt und das meinst du mit "wird danach geladen".

  • Code
    <div id="image-map" style="width: 650px; height: 480px; border: 1px solid rgb(170, 170, 170); position: relative; outline-style: none;" class="leaflet-container leaflet-touch leaflet-fade-anim leaflet-grab leaflet-touch-drag leaflet-touch-zoom" tabindex="0"><div class="leaflet-pane leaflet-map-pane" style="transform: translate3d(-324px, 239px, 0px);"><div class="leaflet-pane leaflet-tile-pane"></div><div class="leaflet-pane leaflet-overlay-pane"><img class="leaflet-image-layer leaflet-zoom-animated" style="z-index: 1; transform: translate3d(324px, -241px, 0px); width: 660px; height: 480px;" src="kartenwerk/assets/yrdanea-worldmap-past.webp" alt=""></div><div class="leaflet-pane leaflet-shadow-pane"></div><div class="leaflet-pane leaflet-marker-pane"></div><div class="leaflet-pane leaflet-tooltip-pane"></div><div class="leaflet-pane leaflet-popup-pane"></div><div class="leaflet-proxy leaflet-zoom-animated" style="transform: translate3d(324px, -239px, 0px) scale(1);"></div></div><div class="leaflet-control-container"><div class="leaflet-top leaflet-left"><div class="leaflet-control-zoom leaflet-bar leaflet-control"><a class="leaflet-control-zoom-in" href="#" title="Zoom in" role="button" aria-label="Zoom in" aria-disabled="false"><span aria-hidden="true">+</span></a><a class="leaflet-control-zoom-out leaflet-disabled" href="#" title="Zoom out" role="button" aria-label="Zoom out" aria-disabled="true"><span aria-hidden="true">−</span></a></div></div><div class="leaflet-top leaflet-right"></div><div class="leaflet-bottom leaflet-left"></div><div class="leaflet-bottom leaflet-right"><div class="leaflet-control-attribution leaflet-control"><a href="https://leafletjs.com" title="A JavaScript library for interactive maps"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"></path><path fill="#FFD500" d="M0 4h12v3H0z"></path><path fill="#E0BC00" d="M0 7h12v1H0z"></path></svg> Leaflet</a></div></div></div></div>
  • Meine Hoffnung ist ja immer noch, hierfür endlich mal eine Lösung zu finden, die dann auch für andere Weltenbastler als technisches Template dienen kann, welches universell für verschiedene Welten nutzbar ist.


    Klar, das kann nur für Leute interessant sein, die überhaupt irgendeine Form von Website betreiben. Aber ich denk mir halt - wenn sich das in diesem Obsidian-Rahmen zum Laufen bringen ließe, dann ginge das ja vielleicht auch in WordPress … und auf einer selbst gebastelten html-Seite natürlich sowieso.

  • Ich hab das Problem.


    Obsidian lädt offenbar die Seiten selbst nach, hängt sie dann ins DOM und schreibt die Adresse um, ohne dass ein normaler Pageload des Browsers stattfindet, der das Script triggern würde.


    Ich hab das hier gefunden: https://www.reddit.com/r/Obsid…t_execution_on_page_load/

    Vielleicht hilft dir das genannte Plugin auch.

    Man kann gar nicht so rundum stromlinienförmig sein, dass es nicht irgendeine Pappnase gibt, die irgendetwas auszusetzen hat.
    - Armin Maiwald

  • Hm, sieht leider nicht danach aus. Evtl. bezieht sich das auch bloß auf Scripting innerhalb der App, aber es funktioniert nicht im Export (und der Quellcode sieht ganz übel aus).


    Stattdessen bekomme ich beim Export eine nette Ansicht des Codes, den ich auch komfortabel kopieren kann ... hilft mir nur leider nicht.


    Kann natürlich sein, dass ich es falsch benutze :-/


    edit: Hm nee, selbes Problem - die gehen alle davon aus, dass man das innerhalb der Obsidian App nutzen möchte.

  • Ich würde jetzt ein Script bauen, das nur mal Piep sagt (log oder alert, nach Geschmack), dann siehst du, ob du es überhaupt aufgerufen kriegst. Damit würde ich sowohl die Position dieser Leaflet-Einstellungen als auch den Script-Tag, in dem leaflet.js geladen werden soll, testen.

    Man kann gar nicht so rundum stromlinienförmig sein, dass es nicht irgendeine Pappnase gibt, die irgendetwas auszusetzen hat.
    - Armin Maiwald

  • Das ist, was du diesem Plugin sagst, was ausgeführt werden soll? D.h. dieses Plugin tut's net?

    Hm, da müsste ich mich dann tiefer reingraben.


    Einen Vorschlag, der dran vorbei zielt, hätte ich noch: Stopf die Karte in ein Iframe. Da drin sollte es ein echtes Pageload geben.

    Man kann gar nicht so rundum stromlinienförmig sein, dass es nicht irgendeine Pappnase gibt, die irgendetwas auszusetzen hat.
    - Armin Maiwald

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!