Funktioniert bei mir auch nicht. Habe 1:1 deinen Code genommen und meine KML Datei in einem Unterverzeichnis /kml/ der HTML Seite geschoben.
Allerdings befindet sich in meiner KML Datei keine Pfade sondern nur Punkte (Marker). Ich versuche es mal mit einer CSV Datei, muss der Code dann viel anders lauten oder kann ich einfach die Zeilen
// var runLayer = omnivore.kml('/kml/Dateiname.kml')
// var runLayer = omnivore.kml('./kml/2012-02-10.kml')// funktioniert
var runLayer = omnivore.kml('kml/2012-02-10.kml')// funktioniert
durch
// var runLayer = omnivore.csv('/csv/Dateiname.csv')
// var runLayer = omnivore.csv('./csv/2012-02-10.csv')// funktioniert
var runLayer = omnivore.csv('csv/2012-02-10.csv')// funktioniert
Ich kenne das omnivore Plugin zwar nicht, aber ich kann min nicht vorstellen, dass omnivore.kml csv Dateien entgegen nimmt. Ließ dir doch dazu mal die Dokumentation zum Plugin durch
Bzw. Hast du vorher nachgeschaut, ob es die csv Methode überhaupt gibt?
Ansonsten ist es auch sehr hilfeich, wenn du in deinem Btowser mit F12 mal den Debugger startest und uns die Ausgaben vom console-Log und der Netzwerkansicht gibst. Bei letzterem könnte es ja sein, dass z.B. ein 404 vorliegt, weil er doch an der falschen Stelle sucht.
Unter chrome kann sie aber auch dann kommen, wenn die irgendwas.html Datei auch via file:// geöffnet wird.
@firechhe: magst du uns auch mal dein Systemsetup (Windows, Linux, Webserver, etc.) verraten? Liege ich mit meiner Vermutung richtig, dass du z.B. die html(-Datei) per Doppelklick öffnest?
Ja … die Zeiten, als man HTML Dateien direkt vom Explorer geöffnet und dann auch noch Dat(ei)en (und dann auch noch per file://) nachgeladen hat sind definitiv schon länger vorbei. Schonmal was von XAMPP gehört?
Das läuft nicht. Das läuft auch in ganz vielen anderen Fällen nicht (PHP oder so was). Zur Web-Entwicklung brauchst du zwingend einen lokalen Webserver, damit eine HTTP-Umgebung vorliegt.
Lokaler Webserver ist kein Hexenwerk, es muss gar kein Apache sein (obwohl das 2fellos der beste ist), ich hatte zu Zeiten meiner HTML-Entwicklung einen Janaserver laufen. Ist schnell installiert, Konfig lässt sich durchklicken, in zehn Minuten haste das Ding am Start.
Okay, alles klar danke für den Tipp.
Hab das gesamte Verzeichnis nun mal testweise auf einen “richtigen” Webserver hochgeladen. Und siehe da, es funktioniert!
Eine .csv Datei konnte ich gerade einlesen. KML funktioniert noch nicht - schade. Ich generiere mir über Excel .kml Dateien die ich anschließend in der App maps.me einlese. Wäre natürlich schön, wenn ich die gleiche .kml auch in leaflet einlesen könnte.
Hat da jemand schon mit gearbeitet? Oder kann mir beim CSV Import weiterhelfen? Momentane erstellt mir leaflet nur die Marker. Ich würde aber gern noch per Mausklick Informationen hinterlegen (im besten Fall eine Tabelle).
Zudem würde ich gerne die einzelnen importieren DSV oder KML Dateien über solch einen Ebenenbutton ein- und ausblenden können.
Okay, bin schon wieder eine Ecke weiter.
KML Dateien kann ich nun auch importieren.
Habe nun das Problem, dass ich wohl so einen layer switch hinzufügen kann, aber ich habe direkt zwei untereinander? Brauch eigtl. nur einen Zudem habe ich keine Boxen zum “anhaken” sondern nur dieses kleinen Kreise. Ich glaube man nennt sie checkboxes und radioboxes.
Ich möchte aber durchaus mehrere KML Ebenen einblenden und nicht nur eine.
Die Initialisierung des Layer Control selbst muss außerhalb der ‘ready’ Event Funktion stehen, das soll nicht für jeden KML Layer ausgeführt werden, also den “var overlays = …” Abschnitt ganz ans Ende außerhalb der Klammern, vor das “” verschieben.
Der Konstruktor erwartet zwei Parameter, zuerst die Base Layer (hier leer), dann die Overlays:
Vielen Dank für die Hilfe. Läuft soweit.
Ein Problem habe ich noch und zwar wird das PopUp nur an einer Ebene angehangen.
Liegt vermutl. an diesem Codeabschnitt:
Ist mir oben schon aufgefallen, dachte aber das wäre gekürzt: das “.on(‘ready’, …” muss für jeden Layer – also auch “ansaugstellen” – aufgerufen und die Referenzen auf die Layer Variable entsprechend angepasst werden. Wenn es noch mehr Layer werden, könnte man das auch in einer gemeinsamen Funktion generalisieren.
Zum Verständnis: beim Aufruf von “omnivore.kml” wird erst mal nur ein leerer Layer initialisiert und zurückgegeben und das Laden der Daten von der übergebenen URL passiert dann asynchron im Hintergrund. Auf die Daten im Layer kann man erst zugreifen, wenn sie vollständig geladen sind, dafür gibt es die Benachrichtigung über den “ready” Event.
Damit das “map.fitBounds” nicht nur auf die zuletzt geladenen Daten zoomt, müsste man noch die Ausdehnung aller bisher geladenen Layer berücksichtigen (oder einfach weglassen), z.B. über “extend”: https://leafletjs.com/reference-1.3.4.html#latlngbounds-extend