Wie kann ich ein SVG-Bild als Kartenmarkierung in OpenLayers-3 verwenden?

8

Ich versuche, in OpenLayers-3 (OL3) mithilfe von SVG-Bildern "Pin-Drops" (Kartenmarkierungen) zu erstellen.

Momentan verwende ich PNG-Bilder als Pindrops, die auf das ol.style.Icon-Quellenattribut ("src") verweisen. Dies schlägt jedoch fehl, ein SVG-Bild zu verwenden. Gibt es eine andere Möglichkeit, ein SVG auf die gleiche Weise zu verwenden? Vielleicht mit einer Referenz neben ol.style.Icon sogar? Es gibt bereits eine Menge eingebauter SVG in Open Layers, also sollte diese möglich sein , aber ich habe keine Möglichkeit gefunden, dies in OL3 zum Laufen zu bringen. Gibt es eine andere Möglichkeit, dies in OL3 zu tun, die ich berücksichtigen sollte?

Hinweis: Wir haben bereits versucht, eine ol.Vector-Ebene zu verwenden. Wenn der Benutzer jedoch vergrößert bzw. verkleinert wird, vergrößert / verkleinert sich das SVG-Bild, was eine unzureichende Problemumgehung darstellt.

OL3 (fehlgeschlagen):

%Vor%

Sehr ähnliche Funktionalität, das folgende Beispiel, das ich online gefunden habe, ist fast perfekt, wenn das Beispiel OpenLayers-2 (OL2) -Funktionalität nicht verwendet hätte, die die openlayers.js-Bibliothek aufruft (statt OL3's ol.js) Bibliothek). Leider ist das Austauschen dieser Javascript-Dateien fehlgeschlagen.

OL2 (funktioniert - aber ist die alte OL-Bibliothek):

Ссылка

Online nach einer Lösung zu suchen, scheint nur andere verwirrte Leute zu erzeugen, die nach einer Lösung suchen.

Bitte helfen Sie,

FreeBeer

    
FreeBeer 19.03.2015, 18:33
quelle

6 Antworten

9

Basierend auf der Antwort von @ahocevar können Sie Daten-URIs für SVG verwenden:

%Vor%     
André Moraes 12.01.2016 12:14
quelle
3

SVG-Symbole funktionieren einwandfrei, solange der Inhaltstyp Ihrer SVG-Bilddatei image/svg+xml ist. Beachten Sie auch, dass keine externen Referenzen innerhalb des SVG unterstützt werden. OpenLayers 3 verwendet einfach die Funktion drawImage des 2d-Kontexts. Weitere Informationen zu den Anforderungen von SVG-Inhalten finden Sie hier: Ссылка .

    
ahocevar 22.03.2015 19:45
quelle
3

Konvertieren Sie das SVG zu Base 64. Dieser ( Link ) hat mir geholfen.

hat die Basis 64 kopiert und in JavaScript als String verwendet.

ZB: var svg = "convertedBase64";

Dann

%Vor%

Und Sie sind fertig, vielleicht ein paar Kbs mehr als SVG, aber das hat perfekt für mich funktioniert.

    
Hari Haran 29.02.2016 10:25
quelle
2

Ich hatte das gleiche Problem, aber nicht einmal das Bild mit dem richtigen Mime-Typ serviert geholfen.

Es hat sich auf den SVG ausgedehnt, die Breite und Höhe nicht richtig definiert.

Ich habe die Attribute width und height zum <svg> -Tag hinzugefügt, wie:

%Vor%

Danach konnte ich meine SVG wie jedes andere Bild verwenden.

    
SoonDead 17.02.2016 13:27
quelle
1

Ich hatte auch Probleme, das Symbolbild zu zeigen, Ahocevar Antwort hat mir geholfen löste mein Problem, aber ich musste auch nach dem PHP-Header für SVG suchen Falls Sie oder andere, die diese Antwort sehen, php verwenden, um das SVG zu generieren, müssen Sie die Header-Funktion verwenden, um den Inhaltstyp zu identifizieren.

%Vor%     
talsibony 25.05.2015 12:50
quelle
0

Aufbauend auf SoonDeads Antwort musste ich einen Weg finden, um der Svg die Breite und Höhe hinzuzufügen, ohne die Quelle zu berühren. Mit eckigen, das ist was ich gemacht habe:

%Vor%

Es ist ein wenig wortreich, aber es scheint den Job zu machen.

    
Fredrik Boström 24.03.2016 18:52
quelle

Tags und Links