Leaflet - Projekt Mobilität - Neuling

Einen guten Abend allerseits,

ich interessiere mich zwar schon lange Zeit für Datenvisualisierung und Karten, aber ich bin erst kürzlich auf das OSM-Projekt aufmerksam geworden und seit heute ganz frisch am Start. Was Leaflet angeht, habe ich leider nur rudimentäre (und wahrscheinlich nicht mal das) Kenntnisse von html, css und javascipt und meine bisherigen Leaflet-Kleinprojekte (Karte anzeigen lassen, Marker setzen, Popups anzeigen lassen) habe ich mir durch Tutorials und Internetrecherche zusammenklabüstert. Weiterhin engagiere ich mich ehrenamtlich in einem gemeinnützigen Verein und innerhalb dieser Tätigkeit möchte ich über das Erstellen von interaktiven Karten, Dinge sichtbar machen. Da der Verein nur über begrenzte finanzielle Mittel verfügt und weil ich es selbst lernen möchte bzw. persönlich Spaß an der Herausforderung habe, sehen wir davon ab einen professionellen Progammierer mit solcherlei Projekten zu betrauen.

Soviel zu mir, nun mal konkret zu meinem Vorhaben:
Ich möchte als erstes “Großprojekt” gerne eine etwas abgespeckte Karte in der Machart wie bei http://mobil-in-bonn.de/ für eine andere Stadt in Leaflet programmieren - also verschiedene Mobilitätsbereiche als unterschiedliche, unabhängig anwählbare Layer anlegen. Allerdings möchte ich den Bereich ÖPNV nochmal in Buslinien-Sublayer untergliedern (und damit die Möglichkeit die Strecken der einzelnen Buslinien mir separat anzeigen zu lassen) und zu guter Letzt die Linien beschriftet wie bei der OSM-Verkehrskarte. Ich bin mir durchaus darüber bewusst, dass dies ein sehr ambitioniertes Projekt ist, aber ich will Kartenerstellung mit Leaflet unbedingt erlernen, weiterhin denke ich dies wäre ein Projekt, bei dem ich mir eine Großzahl an Fertigkeiten erarbeiten würde und ich finde natürlich das Projekt als solches unheimlich spannend und sinnvoll.

Vorher hätte ich aber noch ein paar Fragen:

  1. Macht es überhaupt (für einen Neuling) Sinn, solch ein umfangreiches Projekt über Leaflet zu realisieren? Hat es vlt. einen Grund, weshalb der ursprüngliche Kartenersteller es über google maps realisiert hat?

  2. Wie kann ich bei Leaflet (mehrere) Routen in die Karte implementieren, ohne Navigationsfunktion?

  3. Wie kann ich die Routen mit den Linienbezeichnungen beschriften?

Ich würde mich auf jeden Fall über ein paar freundliche & konstruktive Äußerungen freuen.
Beste Grüße
kakoon85

Hi kakoon85,

es ist sicher möglich, Dein Projekt mit leaflet zu realisieren. Dafür solltest Du aber “echt” programmieren können, also schon mal eine Projekt fertig programmiert haben.

Dein Projekt kann man aber auch - ich bin sicher sogar alle Punkte - mit der http://umap.openstreetmap.fr/de/ realisieren. umap ist ein Projekt, das OpenStreetMap und leaflet benutzt.

zu 2) in umap könntest Du solche Sachen entweder
a) schlicht einzeichnen
oder
b) mittels overpass aus den OpenStreetMap-Daten exportiren und in eine umap importiren, exportieren würde mit http://overpass-turbo.eu/ sehr gut gehen

zu 3) Du kannst in einer umap fast “alles” machen, also beschriften, Layer anlegen usw.

Bei Fragen zur umap helfe ich gerne weiter. Oder schau einfach mal eines der zahlreichen Beispiel an.

Grüße

Hallo roald-linus,

zunächst einmal vielen Dank für deine freundlichen (und nicht direkt desillusionierenden, destruktiven) Worte. Irgendwie haben wir doch alle unsere Wunschprojekte, die wir verfolgen und umsetzen möchten, nicht wahr?! Ebenso danke ich dir für dein Hilfsangebot, ich komme gerne darauf zurück.

Ich habe mir tatsächlich schon einmal (kurz) umap angeschaut & finde auch, dass es ein ziemlich mächtiger Karteneditor ist! Dann war allerdings der Gedanke bei mir, dass ich Leaflet sowieso erlernen möchte und dies dann als “Werkstück in meiner Ausbildung” ansehe; also nach dem Motto “Der Weg ist das Ziel” und nicht “Ich will so schnell wie möglich das Projekt fertig bekommen”. Nicht zuletzt ist man, so denke ich zumindest, wenn man die Karte eigenhändig programmiert, noch viel freier in der Gestaltung, selbst wenn umap solch ein mächtiges Tool ist, oder?!

Aber bitte nicht falsch verstehen, ich nehme deinen Hinweis durchaus ernst! Du meinst, dass dieses Projekt ungefähr 5 Nummern zu groß für mich ist und ich erst noch einige Kleinprojekte (bspw. erst mal Karten mit vielen Markern und PopUps setzen und diese sukzessive um weitere Funktionen erweitern) vorher programmieren sollte, lernen sollte wie man Scipts sauber und mit möglichst wenig unnötigem Code programmiert, bevor ich mich da dran setze; allein um einer gewissen Frustration, da man als Neuling mit solch einem Großprojekt auch schnell mal überfordert ist, vorzubeugen?

Wie gesagt, ich bin dir sehr dankbar für deine Anmerkungen und ich werde definitiv nochmal in mich gehen, mir nochmal umap genauer anschauen und dann über weiteres Vorgehen entscheiden.

Beste Grüße
kakoon85

Ich denke, du kannst das schon schaffen allein mit leaflet - Versuch macht kluch :slight_smile:

Fang einfach mal an, und zeige dir die Bushaltestellen als Marker in der Karte an, über ein Menü/Checkbox schaltbar.

Dazu gibt es z.B. das leaflet-plugin leaflet-layer-overpass https://github.com/kartenkarsten/leaflet-layer-overpass , das dir aus Abfragen an die Overpass-API leaflet-layer erzeugt.

Hast du dich schon mit dem grundlegenden Taggingschema von Öffentlichem Nahverkehr in OSM auseinandergesetzt? Ich bin da beiliebe kein Experte, aber ein Einstieg könnte http://wiki.openstreetmap.org/wiki/DE:Public_transport sein.

Ich sehe aber schon die Gefahr, das du schnell frustriert sein könntest, die Lernkurve dürfte recht steil sein wenn du neben OSM und OSM-ÖPNV auch noch HTML, JavaScript und Konsorten lernen musst. Aber probiers, vielleicht klappt es ja, vorallem wenn kein Zeitdruck da ist!

Die Steilheit der Lernkurve kann ich bestätigen. Seit einer Woche nehmen ich mir täglich Zeit, um zu lernen und üben. Ich schätze meinen Stand ähnlich wie kakoon85 ein. Zeitdruck habe ich nicht.

Hat momentan zwar mit einem anderen, kleineren Leaflet-Lernprojekt zu tun, trotzdem eine kurze Frage:

Gibt es die Möglichkeit Text für eine Gruppe an Markers bzw. PopUps ähnlich wie Kategorien in einem Steckbrief (Titel: xxx, Künstler: xxx, Erstellungsdatum: xxx, …) festzulegen, so dass ich bei dem jeweiligen Marker nur noch die individuellen Infos (in diesem Fall “xxx” eintragen muss? Das würde den Code mit Sicherheit viel übersichtlicher machen und wäre sauberer programmiert, als wenn ich bei jedem Marker alles komplett eintragen müsste.

Danke vielmals, Grüße

Schon mal in die Doku geschaut? http://leafletjs.com/reference.html#util-template

Guten Tag allerseits,

ich habe nun tatsächlich eine Frage zu meinem Javascript Quellcode und ich verstehe (sorry!) zum Verrecken nicht, weshalb es nicht funktioniert. Ich habe gestern wirklich Stunden damit verbracht, den Fehler zu suchen, bestimmt 30 verschiedene Sachen ausgetestet, habe z.T. Quelltexte aus Tutorials 1:1 übernommen und es will einfach nicht funktionieren. Ein Sachverständiger wird sich das wahrscheinlich 5min anschauen und direkt den Fehler finden, aber ich bin halt ein Anfänger was JS, CSS und Leaflet angeht und habe eben noch Verständnisprobleme mit der Syntax und der Orthographie. Wahrscheinlich wird mir jetzt jeder anraten Kartenprogrammierung damit zu lassen und auf umap umzuspringen, aber das hier möchte ich dann doch noch schaffen…wenn auch nicht völlig alleine.

Also es geht darum, dass ich unterschiedliche Layer erstellen möchte:
BaseMap-Layer und verschiedene Overlays

Und zwar habe ich zunächst meine Marker als Variablen erstellt und in layergroups (auch diese in Form von Variablen) zusammengefasst. Diese sollten dann eigentlich über die Variable “overlays” angezeigt werden.

Dazu hier der Quellcode des relevanten Bereichs (oben wird noch das “Markerdesign” festgelegt etc.):


           //Erstellung der Marker
            
                var Urbane_Galerie = L.marker([50.8754287708794, 8.02359893918038], {icon: marker_sigestalten}, {title: 'Urbane Galerie'}).bindPopup(popup_sigestalten["Urbane_Galerie"], customOptions);
            
        
                var Quast = L.marker([50.8761353829521, 8.0231523513794], {icon: marker_sigestalten}, {title: 'Zukunftsprojekt Friedrichstraße'}).bindPopup(popup_sigestalten_zp["Quast"], customOptions);
           

                var Alt_Siegen = L.marker([50.8725099686859, 8.02334815263748], {title: 'Alt-Siegen'}).bindPopup(popup_urbane_gemaelde["Alt-Siegen"], customOptions);
                var Hotel_Meurer = L.marker([50.8746976065101, 8.02154839038849], {title: 'Hotel Meurer'}).bindPopup(popup_urbane_gemaelde["Hotel_Meurer"], customOptions);
                var Subkultur = L.marker([50.8761066109333, 8.01743924617768], {title: 'Subkultur'}).bindPopup(popup_urbane_gemaelde["Subkultur"], customOptions);
                var Ofen_Konrad = L.marker([50.8775248810722, 8.01508694887161], {title: 'Ofen Konrad'}).bindPopup(popup_urbane_gemaelde["Ofen_Konrad"], customOptions);
 
                var HuF = L.marker([50.873789558865, 8.01897883415222], {icon: markerRed}, {title: 'Henner und Frieder'}).bindPopup(popup_urbane_kunstkaesten["Henner_und_Frieder"], customOptions);
                var Hirsch = L.marker([50.873633843419, 8.01915317773819], {icon: markerRed}, {title: 'Hirsch'}).bindPopup(popup_urbane_kunstkaesten["Hirsch"], customOptions);
                var Klubb = L.marker([50.8752197470513, 8.02594989538193], {icon: markerRed}, {title: 'Am Klubb'}).bindPopup(popup_urbane_kunstkaesten["Klubb"], customOptions);
                var Salon = L.marker([50.87267038256013, 8.024307355756251], {icon: markerRed}, {title: 'Salon Elegance'}).bindPopup(popup_urbane_kunstkaesten["Salon"], customOptions);
                var Rubens = L.marker([50.8756005589918, 8.01894396543503], {icon: markerRed}, {title: 'Anna und Peter Paul Rubens'}).bindPopup(popup_urbane_kunstkaesten["Rubens"], customOptions);
                var Zonta = L.marker([50.8829436971039, 8.02928790450096], {icon: markerRed}, {title: 'Zonta'}).bindPopup(popup_urbane_kunstkaesten["Zonta"], customOptions);
                }            

  //Initialisierung der Karte mit Optionen
  var map = new L.map('map').setView([50.8763621735378, 8.02561730146408], 15);
            
            //Angabe des tileLayers
            L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
                        attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors',
                        minZoom: 13
                         }).addTo(map);



            /*
            var opnv = new L.TileLayer('http://tile.memomaps.de/tilegen/{z}/{x}/{y}.png',
                {       minZoom: 3,
                        maxZoom: 18,
                        attribution: 'Map data &copy; <a href="http://memomaps.de/">ÖPNV Karte</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'}
                        );
            

            
            var baseMaps = {
                            "OpenStreetMap" : osm, 
                            "opnv" : opnv
                            };
            */        


           //Erstellung der Layer Groups für die Marker
            var lg_kastenkunst = L.layerGroup(HuF, Hirsch, Klubb, Salon, Rubens, Zonta);
            var lg_gemaelde = L.layerGroup(Alt_Siegen, Hotel_Meurer, Subkultur, Ofen_Konrad);
            var lg_sigestalten = L.layerGroup(Urbane_Galerie);
            var lg_sigestalten_zp = L.layerGroup(Quast);
            
            //Erstellung der Overlay-Ebenen
            var overlays = {
                "Kastenkunst" : lg_kastenkunst,
                "Gemälde" : lg_gemaelde,
                "SI.gestalten" : lg_sigestalten,
                "SI.gestalten Zukunftsprojekte" : lg_sigestalten_zp
                }


L.control.layers(null, overlays).addTo(map);



        </script>


Leider funktioniert schon der erste Schritt nicht, da mir für die Zeile:

var lg_kastenkunst = L.layerGroup(HuF, Hirsch, Klubb, Salon, Rubens, Zonta);

der Fehler “ReferenceError: HuF is not defined” ausgegeben wird, obgleich es doch oben als Variable definiert ist.

Von den “baseMaps” gar nicht erst zu sprechen, das hat gar nicht funktioniert, deswegen habe ich es auch rigoros auskommentiert und es bei “L.control.layers” auf “null” gestellt. Momentan ist der Status so, dass ich nur die Basiskarte ohne Marker sehe.

Ich bedanke mich vielmals für konstruktive Ratschläge und wünsche ein schönes Wochenende.
kakoon85

Wo kommt denn die } unter var Zonta her? Sieht nämlich so aus, als wärst du da in einem anderem Scope/Kontext, weshalb JS weiter unten dann eben keine Referenz mehr dazu finden würde.

http://leafletjs.com/reference.html#marker-options

{icon: markerRed}, {title: ‘Henner und Frieder’} gehören in 1 Objekt, nicht in 2 > {icon: markerRed, title: 'Henner und Frieder}

Super, vielen Dank für die beiden Ratschläge!
Zumindest ersterer von Harald Hartmann hat den Ausschlag dafür gegeben, dass jetzt die Fehlermeldung verschwunden ist bzw. jetzt auch keine Fehlermeldung mehr angezeigt wird, das Steuerelement für die einzelnen Layers angezeigt wird und sowohl die Overlays als auch die BaseMaps im Steuerelement angezeigt werden. Grund für den Fehler war noch ein Code-Artefakt von den Programmier-Anfängen, als dann eine function direkt zu Beginn des Quellcodes geöffnet wurde…ich wäre jedenfalls im Traum nicht drauf gekommen, dass es daran lag.

Nun gibt es noch den letzten Mosaikstein, der mir fehlt, damit ich dieses Projekt für mich zu einem befriedigenden Ende zu bringen - um mich danach eher umap zu widmen. Die Marker werden aus irgendwelchen Gründen nicht angezeigt. Sie wurden in einer früheren Version auch schon mal schön angezeigt, allerdings waren sie da noch nicht in Layer Groups eingeteilt. Wie gesagt, es gibt keine Fehlermeldung und alles ist auch eigentlich gut, außer dass eben keine Marker angezeigt werden. Habe ich da irgendwas geschludert?

Hier der aktuelle Sourcecode in Gänze:


<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="utf-8">
        <title>TestMap</title>
        <link rel="stylesheet" type="text/css" href="style.css" />
        <link rel="stylesheet" type="text/css" href="leaflet/leaflet.css" />
        <script src='leaflet/leaflet.js'></script>
    
</head>

<body>
        <div id="map"></div>


        <script>
            
            
            /*Erstellung eines Markers als Variable an einer bestimmten Stelle + Hinzufügung zur Karte
            var marker = L.marker([50.8743582543348, 8.01998063921929]).addTo(map);*/

            /*Erstellung eines Icons als Variable bestehend aus Icon und Schatten, darunter die Parameter
            var greenIcon = L.icon({                              
                iconUrl: 'leaf-green.png',
                shadowUrl: 'leaf-shadow.png',

                iconSize:       [38, 95],
                shadowSize:     [50, 64],
                iconAnchor:      [22, 94],
                shadowAnchor:    [4, 62],
                popupAnchor:     [-3, -76]
             });*/   

            //Erstellung einer Gruppe für Icons, in der alle Parameter schon festgelegt sind
            var LeafIcon = L.Icon.extend({
                options: {
                shadowUrl: 'leaf-shadow.png',
                iconSize:       [38, 95],
                shadowSize:     [50, 64],
                iconAnchor:     [22, 94],
                shadowAnchor:   [4, 62],
                popupAnchor:    [-3, -76]
                }
                });

            var greenLeaf = new LeafIcon({iconUrl: 'leaf-green.png'}),
                redLeaf = new LeafIcon({iconUrl: 'leaf-red.png'}),
                orangeLeaf = new LeafIcon({iconUrl: 'leaf-orange.png'});

            // Implementierung von weiteren Markern        
            var markerRed = L.icon({
                iconUrl: 'marker-red.png',
                iconSize:       [35, 35]
                });

            var marker_sigestalten = L.icon({
                iconUrl: 'sigestalten.png',
                iconSize:       [40, 40]
                });

            //SI.gestalten Projekte
            var popup_sigestalten = {
                "Urbane_Galerie" : "<b>Titel</b>: Urbane Galerie<br><b>KünstlerIn</b>: Highlightz<br><b>Erstellungsjahr</b>: 2016"
                }
 
            //Urbane Gemälde
            var popup_urbane_gemaelde = {
                "Alt-Siegen" : "<b>Titel</b>: Alt-Siegen<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx", 
                "Hotel_Meurer" : "<b>Titel</b>: Hotel Meurer<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx",
                "Subkultur" : "<b>Titel</b>: Subkultur<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx",
                "Ofen_Konrad" : "<b>Titel</b>: Ofen Konrad<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx"
                } 
            //Strom- und Verteilerkästen
            var popup_urbane_kunstkaesten = {
                "Henner_und_Frieder" : "<b>Titel</b>: Henner und Frieder<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx",
                "Hirsch" : "<b>Titel</b>: Hirsch<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx",
                "Klubb" : "<b>Titel</b>: Am Klubb<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx",
                "Salon" : "<b>Titel</b>: Salon Elegance<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx",
                "Rubens" : "<b>Titel</b>: Maria und Peter Paul Rubens<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx",
                "Zonta" : "<b>Titel</b>: Zonta - Augen auf!<br><b>KünstlerIn</b>: xxx<br><b>Erstellungsjahr</b>: xxx"
                }
            
            var customOptions =
                {
                    'maxWidth': '500'
                }

            /*L.marker([50.8754287708794, 8.02359893918038], {icon: greenLeaf}).addTo(map).bindPopup("Urbane Galerie");
            L.marker([50.8761353829521, 8.0231523513794], {icon: redLeaf}).addTo(map).bindPopup("Friedrichstraße");*/ 
         

  //Initialisierung der Karte mit Optionen
  var map = new L.map('map').setView([50.8763621735378, 8.02561730146408], 15);
            
            //Angabe des tileLayers
            var osm = new L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
                        attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors',
                        minZoom: 13
                         }).addTo(map);

            var opnv = new L.TileLayer('http://tile.memomaps.de/tilegen/{z}/{x}/{y}.png', {       
                        attribution: 'Map data &copy; <a href="http://memomaps.de/">ÖPNV Karte</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
                        minZoom: 3,
                        maxZoom: 18
                        });

            var Stamen_Watercolor = new L.tileLayer('http://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.{ext}', {
                        attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
                        subdomains: 'abcd',
                        minZoom: 13,
                        ext: 'png'
                        });

            
            var baseMaps = {
                            "OpenStreetMap" : osm, 
                            "ÖPNV-Karte" : opnv,
                            "Stamen" : Stamen_Watercolor
                            };

             //Erstellung der Marker
            
                var Urbane_Galerie = L.marker([50.8754287708794, 8.02359893918038], {icon: marker_sigestalten, title: 'Urbane Galerie'}).bindPopup(popup_sigestalten['Urbane_Galerie'], customOptions);           

                var Alt_Siegen = L.marker([50.8725099686859, 8.02334815263748], {title: 'Alt-Siegen'}).bindPopup(popup_urbane_gemaelde['Alt-Siegen'], customOptions);
                var Hotel_Meurer = L.marker([50.8746976065101, 8.02154839038849], {title: 'Hotel Meurer'}).bindPopup(popup_urbane_gemaelde['Hotel_Meurer'], customOptions);
                var Subkultur = L.marker([50.8761066109333, 8.01743924617768], {title: 'Subkultur'}).bindPopup(popup_urbane_gemaelde['Subkultur'], customOptions);
                var Ofen_Konrad = L.marker([50.8775248810722, 8.01508694887161], {title: 'Ofen Konrad'}).bindPopup(popup_urbane_gemaelde['Ofen_Konrad'], customOptions);
 
                var HuF = L.marker([50.873789558865, 8.01897883415222], {icon: markerRed, title: 'Henner und Frieder'}).bindPopup(popup_urbane_kunstkaesten['Henner_und_Frieder'], customOptions);
                var Hirsch = L.marker([50.873633843419, 8.01915317773819], {icon: markerRed, title: 'Hirsch'}).bindPopup(popup_urbane_kunstkaesten['Hirsch'], customOptions);
                var Klubb = L.marker([50.8752197470513, 8.02594989538193], {icon: markerRed, title: 'Am Klubb'}).bindPopup(popup_urbane_kunstkaesten['Klubb'], customOptions);
                var Salon = L.marker([50.87267038256013, 8.024307355756251], {icon: markerRed, title: 'Salon Elegance'}).bindPopup(popup_urbane_kunstkaesten['Salon'], customOptions);
                var Rubens = L.marker([50.8756005589918, 8.01894396543503], {icon: markerRed, title: 'Maria und Peter Paul Rubens'}).bindPopup(popup_urbane_kunstkaesten['Rubens'], customOptions);
                var Zonta = L.marker([50.8829436971039, 8.02928790450096], {icon: markerRed, title: 'Zonta'}).bindPopup(popup_urbane_kunstkaesten['Zonta'], customOptions);
                  

           //Erstellung der Layer Groups für die Marker
            var lg_kastenkunst = L.layerGroup(HuF, Hirsch, Klubb, Salon, Rubens, Zonta);
            var lg_gemaelde = L.layerGroup(Alt_Siegen, Hotel_Meurer, Subkultur, Ofen_Konrad);
            var lg_sigestalten = L.layerGroup(Urbane_Galerie);

            
            //Erstellung der Overlay-Ebenen
            var overlays = {
                "Kastenkunst" : lg_kastenkunst,
                "Gemälde" : lg_gemaelde,
                "SI.gestalten" : lg_sigestalten
                }


L.control.layers(baseMaps, overlays).addTo(map);

        </script>
</body>
    
</html>

Ich bedanke mich, wie immer, herzlich für die konstruktive Hilfe & wünsche noch einen schönen Wochenausklang.
kakoon85