In Openlayers eine selbst erzeugte SVG als hinzufügen



  • Hallo zusammen,

    ich habe mir mit Javascript eine SVG erstellt

    var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
            rect.setAttributeNS(null, 'x', 0);
            rect.setAttributeNS(null, 'y', 0);
            rect.setAttributeNS(null, 'height', 500);
            rect.setAttributeNS(null, 'width',  500);
            rect.setAttributeNS(null, 'fill', "white");
    	svg.appendChild(rect);
    

    und möchte diese nun in Openlayers einbinden, sodass diese wenn man zoomt auch größer und kleiner wird ! Meine erste Lösung war es, das ganze
    als Overlay hinzuzufügen aber da bleibt die Grafik immer gleich groß und das hilft mir nicht.

    Bei meinen Recherchen habe ich zwar viele Beispiele gefunden, wie man eine SVG als URL eingebinden kann aber nie eine dynamisch erzeugte.

    https://openlayers.org/en/latest/examples/static-image.html

    Kann mir da einer weiterhelfen? 😕



  • Vielleicht ein wenig konkreter...

    Warum funktioniert dieser Code nicht?

    var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
            rect.setAttributeNS(null, 'x', 0);
            rect.setAttributeNS(null, 'y', 0);
            rect.setAttributeNS(null, 'height', 500);
            rect.setAttributeNS(null, 'width',  500);
            rect.setAttributeNS(null, 'fill', "white");
            svg.appendChild(rect);
    
            var s = 'data:image/svg+xml;base64,' + window.btoa(new XMLSerializer().serializeToString(document.getElementById("svg")));
    
            var imageLayer = new ol.layer.Image({
                source: new ol.source.ImageStatic({
                    url: s,
                    imageSize: [550, 700],
    
                    projection: map.getView().getProjection(),
                    imageExtent: ol.extent.applyTransform([8.4371433, 46.449992, 9.4371433, 47.449992], ol.proj.getTransform("EPSG:4326", "EPSG:3857"))
                })
            });
    
            map.addLayer(imageLayer);
    

    Warum wird die SVG nicht auf der Karte angezeigt? Gebe ich in der url einen Link zu einem Bild hin funktioniert es. Im Internet habe ich gefunden, dass man eine inline SVG so zu einer URL machen kann.

    https://stackoverflow.com/questions/28450471/convert-inline-svg-to-base64-string

    Die Größe der Grafik bei ImageSize stimmt ebenfalls.


Anmelden zum Antworten