Kann ich meine konvertierte image.svg als Google Map-Symbol verwenden? Ich habe mein PNG-Bild in SVG konvertiert und möchte dieses Symbol wie das Google Map-Symbol verwenden, das gedreht werden kann. Ich habe bereits versucht, das Google Map-Symbol zu verwenden, aber ich möchte ein Symbol wie Auto, Mann usw. haben. Deshalb habe ich meine PNG-Dateien in SVG konvertiert, genau wie diese Beispielseite, was er für diese http: / verwendet /www.goprotravelling.com/
90
Antworten:
Sie können Ihr Symbol mit der SVG-Pfadnotation rendern .
Weitere Informationen finden Sie in der Google-Dokumentation .
Hier ist ein grundlegendes Beispiel:
Hier ist ein Arbeitsbeispiel zum Anzeigen und Skalieren eines SVG-Markierungssymbols:
JSFiddle-Demo
Bearbeiten:
Ein weiteres Beispiel hier mit einem komplexen Symbol:
JSFiddle-Demo
Bearbeiten 2:
Und so können Sie eine SVG-Datei als Symbol haben:
JSFiddle-Demo
quelle
Wenn Sie eine vollständige SVG-Datei benötigen, die nicht nur einen Pfad enthält und auf Clientseite geändert werden soll (z. B. Text ändern, Details ausblenden, ...), können Sie eine alternative Daten-URL mit der enthaltenen SVG-Datei verwenden:
JavaScript (Firefox) btoa () wird verwendet, um die base64-Codierung aus dem SVG-Text abzurufen. Sie können auch http://dopiaza.org/tools/datauri/index.php verwenden , um Basisdaten-URLs zu generieren.
Hier ist ein vollständiges Beispiel jsfiddle :
Weitere Informationen finden Sie hier .
Vermeiden Sie die Base64-Codierung:
Um zu vermeiden , Base64 - Codierung Sie ersetzen können
'data:image/svg+xml;charset=UTF-8;base64,' + btoa(svg)
mit'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg)
Dies sollte mit modernen Browsern bis hin zu IE9 funktionieren. Der Vorteil ist, dass
encodeURIComponent
es sich um eine Standard-js-Funktion handelt, die in allen modernen Browsern verfügbar ist. Möglicherweise erhalten Sie auch kleinere Links, aber Sie müssen dies testen und in Betracht ziehen, es'
anstelle"
Ihres SVG zu verwenden.Weitere Informationen finden Sie unter Optimieren von SVGs in Daten-URIs .
IE-Unterstützung: Um SVG-Marker im IE zu unterstützen, sind zwei kleine Anpassungen erforderlich, wie hier beschrieben: SVG-Marker im IE . Ich habe den Beispielcode aktualisiert, um IE zu unterstützen.
quelle
data:image/svg+xml;utf8,
. Weitere Informationen: css-tricks.com/probably-dont-base64-svg#
Sie die URL-Codierung verwendet?Ich weiß, dass dieser Beitrag etwas alt ist, aber ich habe bei SO so viele schlechte Informationen darüber gesehen, dass ich schreien könnte. Also muss ich meine zwei Cent mit einem ganz anderen Ansatz einwerfen, von dem ich weiß, dass er funktioniert, da ich ihn auf vielen Karten zuverlässig verwende. Abgesehen davon glaube ich, dass das OP die Möglichkeit haben wollte, die Pfeilmarkierung auch um den Kartenpunkt zu drehen, was sich von der Drehung des Symbols um seine eigene x-, y-Achse unterscheidet, die sich ändert, wohin die Pfeilmarkierung auf der Karte zeigt.
Denken Sie zunächst daran, dass wir mit Google Maps und SVG spielen. Daher müssen wir die Art und Weise berücksichtigen, in der Google die Implementierung von SVG für Marker (oder tatsächlich Symbole) bereitstellt. Google setzt seinen Anker für das SVG-Markierungsbild auf 0,0, was NICHT die obere linke Ecke der SVG-Ansichtsbox ist. Um dies zu umgehen, müssen Sie Ihr SVG-Bild etwas anders zeichnen, um Google das zu geben, was es will ... Ja, die Antwort liegt in der Art und Weise, wie Sie den SVG-Pfad in Ihrem SVG-Editor (Illustrator, Inkscape usw.) erstellen. .).
Der erste Schritt besteht darin, die viewBox zu entfernen. Dies kann erreicht werden, indem Sie die viewBox in Ihrem XML auf 0 setzen ... das ist richtig, nur eine Null anstelle der üblichen vier Argumente für die viewBox. Dadurch wird das Ansichtsfeld deaktiviert (und ja, dies ist semantisch korrekt). Sie werden wahrscheinlich sofort bemerken, dass die Größe Ihres Bildsprungs sofort springt, und das liegt daran, dass das SVG keine Basis (die ViewBox) mehr hat, um das Bild zu skalieren. Daher erstellen wir diese Referenz direkt, indem wir die Breite und Höhe auf die tatsächliche Anzahl der Pixel einstellen, die Ihr Bild im XML-Editor Ihres SVG-Editors haben soll.
Durch Festlegen der Breite und Höhe des SVG-Bilds im XML-Editor erstellen Sie eine Grundlinie für die Skalierung des Bildes. Diese Größe wird standardmäßig für die Eigenschaften der Markierungsskalierung auf den Wert 1 gesetzt. Sie sehen den Vorteil, den dies für die dynamische Skalierung des Markers hat.
Nachdem Sie die Bildgröße festgelegt haben, verschieben Sie das Bild, bis der Teil des Bildes, den Sie als Anker verwenden möchten, über den 0,0-Koordinaten des SVG-Editors liegt. Sobald Sie dies getan haben, kopieren Sie den Wert des Attributs d des SVG-Pfads. Sie werden feststellen, dass etwa die Hälfte der Zahlen negativ ist. Dies ist das Ergebnis der Ausrichtung Ihres Ankerpunkts auf 0,0 des Bildes anstelle der Ansichtsbox.
Mit dieser Technik können Sie den Marker dann korrekt um den Lat- und Lng-Punkt auf der Karte drehen. Dies ist die einzige zuverlässige Methode, um den gewünschten Punkt auf dem SVG-Marker an den Lat und Long der Markerposition zu binden.
Ich habe versucht, eine JSFiddle dafür zu erstellen , aber es gibt einen Fehler in der Implementierung, einer der Gründe, warum ich neu interpretierten Code nicht so mag. Stattdessen habe ich unten ein vollständig eigenständiges Beispiel eingefügt, das Sie ausprobieren, anpassen und als Referenz verwenden können. Dies ist derselbe Code, den ich bei JSFiddle ausprobiert habe und der fehlgeschlagen ist, der jedoch ohne Wimmern durch Firebug segelt.
Dies ist genau das, was Google für seine eigenen Symbole tut, die in der SYMBOL-Klasse der Maps-API verfügbar sind. Wenn Sie das also nicht überzeugt ... Ich hoffe, dies hilft Ihnen dabei, einen SVG-Marker für richtig zu erstellen und einzurichten Ihre Google Maps endevours.
quelle
Ja, Sie können eine .svg-Datei für das Symbol verwenden, genau wie Sie .png oder ein anderes Bilddateiformat. Stellen Sie einfach die URL des Symbols auf das Verzeichnis ein, in dem sich die SVG-Datei befindet. Beispielsweise:
quelle
width="33px" height="50px"
- Siehe stackoverflow.com/a/21783089/165673Die Dinge laufen besser, jetzt können Sie SVG-Dateien verwenden.
quelle
Wie von anderen in diesem Thread erwähnt, vergessen Sie nicht, die Attribute width und height im svg explizit wie folgt festzulegen:
Wenn Sie dies nicht tun, kann Ihnen keine js-Manipulation helfen, da gmaps keinen Referenzrahmen haben und immer eine Standardgröße verwenden.
(Ich weiß, dass es in einigen Kommentaren erwähnt wurde, aber sie sind leicht zu übersehen. Diese Informationen haben mir in verschiedenen Fällen geholfen.)
quelle
OK! Ich habe dies bald in meinem Web getan. Ich versuche auf zwei Arten, den benutzerdefinierten Google Map-Marker zu erstellen. Dieser Ausführungscode mit canvg.js ist die beste Kompatibilität für den Browser. Der auskommentierte Code unterstützt IE11 derzeit nicht.
quelle
Du musst bestehen
optimized: false
.Z.B
Ohne zu bestehen
optimized: false
, erschien mein SVG als statisches Bild.quelle