Wie kann ich SVG-Diagramme in Google Maps überlagern?
Möchte ich fügen Sie ein overlay-Bild auf einer Google-Karte. Das Bild ist eine SVG-Datei habe ich erstellt (Python SVGFig).
Ich bin mit dem folgenden code:
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(48.8, 2.4), 12);
//ground overlay
var boundaries = new GLatLngBounds(new GLatLng(48.283188032632829, 1.9675270369830129), new GLatLng(49.187215000000002, 2.7771877478303999));
var oldmap = new GGroundOverlay("test.svg", boundaries);
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.addOverlay(oldmap);
}
Überraschend, es funktioniert mit Safari 4, aber es funktioniert nicht mit Firefox (mit Safari 3, der hintergrund ist nicht transparent).
Hat jemand eine Idee, wie ich konnte ein SVG-overlay?
PS1: ich habe gelesen, einige Werke wie diese oder den source-code von swa.ethz.ch/googlemaps, aber es scheint, dass Sie JavaScript verwenden, code zu analysieren, die SVG und fügen Sie nacheinander alle Elemente (aber ich Verstand nicht, alle der Quelle...).
PS2: Die SVG ist aus unterschiedlichen gefüllte Pfade und Kreise, mit Transparenz.
Wenn es keine Lösung für mein overlay SVG, ich kann 2 alternative Lösungen:
- Rastern von SVG -
- wandeln die Pfade und Kreise in GPolygons
Aber ich weiß nicht wirklich wie die 1. Lösung wegen der schlechten Qualität der bitmap und die Zeit zu generieren, die es mit antialiasing.
Und für die 2. Lösung, die Bögen, Ellipsen und Kreise werden zerlegt in kleine Polylinien. Viele von Ihnen notwendig für ein gutes Ergebnis. Aber ich habe rund 3000 Bögen und Kreise zu zeichnen, also...
InformationsquelleAutor der Frage ThibThib | 2009-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind einige Neuigkeiten (ich hoffe, es ist besser, legen Sie Sie hier in einer Antwort, statt der Bearbeitung meiner Fragen oder erstellen eine neue Frage. Bitte fühlen Sie sich frei, um es zu verschieben, wenn nötig, oder um mir zu sagen, so wie ich das beheben kann):
Mein problem war Folgendes:
funktionierte nicht auf Safari 3, Firefox und Opera (IE ist nicht zu aktivieren, um zu zeichnen, SVG).
In der Tat, dieser code produzieren Sie die Einfügemarke (in einem
<div>
) das folgende elementUnd Safari 4 ist in der Lage zu zeichnen Sie eine SVG-Datei als Bild, aber das ist nicht die Art und Weise zu tun, für die anderen browser. Die Idee ist also nun, zum erstellen einer benutzerdefinierten overlay für die SVG, wie bereits erläutert,hier.
Das ist der Grund, warum ich gefragt diese Frage (tut mir Leid, aber von HTML/javascript sind nicht meine stärksten Punkte).
Und da ist ein kleiner bug, der mit Webkit zum Rendern der SVG mit transparentem hintergrund mit
<object>
element, ich<object>
oder<img>
entsprechend an den browser (ich mag das nicht, aber... für den moment, es ist immer noch die quick-and-dirty-versuche)So begann ich mit diesem code (noch in Arbeit):
Den
draw
Funktion ist noch nicht geschrieben.Ich habe noch ein problem (ich langsam Fortschritte, Dank dem, was ich Lesen/lernen überall, und Dank auch an Menschen, die meine Fragen beantworten).
Nun, das problem ist Folgendes : mit der
<object>
tag, die Karte ist nicht ziehbar. Alle über die<object>
element, der Mauszeiger ist nicht die "hand-Symbol" ziehen Sie die Karte, aber nur die normalen Zeiger.Und habe ich nicht herausfinden können, wie diese zu beheben. Sollte ich eine neue Maus-Ereignis (ich sah nur die Maus-Ereignis aus, wenn ein Klick oder einem Doppel-klicken Sie auf " Anhängen, aber nicht für das ziehen der Karte...) ?
Oder gibt es einen anderen Weg, um diese Ebene für die Erhaltung der drag-Fähigkeit ?
Danke für deine Kommentare und Antworten.
PS: ich versuche auch hinzufügen, indem man die Elemente der SVG, aber... in der Tat... ich weiß nicht, wie Sie in den DOM-Baum. In dieses Beispieldie SVG wird gelesen und analysiert, mit
GXml.parse()
und alle Elemente mit einem bestimmten tag-Namen sind erhalten (xml.documentElement.getElementsByTagName
) und Hinzugefügt, um die SVG-Knoten (svgNode.appendChild(node)
). Aber in meinem Fall, ich brauche, um direkt hinzuzufügen, die SVG/XML-Struktur (hinzufügen aller Elemente ist), und es gibt verschiedene tags (<defs>
,<g>
<circle>
<path>
usw.). Es ist vielleicht einfacher, aber ich weiß nicht, wie zu tun ist.. 🙁InformationsquelleAutor der Antwort ThibThib
Verbringe ich den letzten Abend an diesem problem, und ich endlich die Lösung gefunden zu meinem problem.
Es war nicht so schwierig.
Die Idee ist, wie Chris B. sagte, das laden der SVG-Datei mit GDownloadUrl, analysieren es mit GXml.parse() und fügen Sie in den DOM-Baum alle SVG-Elemente, die ich brauche
Zu vereinfachen, habe ich angenommen, dass alle SVG-Elemente wurde in einer großen Gruppe namens "mainGroup". Ich habe auch vermutet, dass einige Elemente in der Datei.
So, hier ist die Bibliothek, auf der Grundlage der Google Maps Custom Overlays:
Und Sie können es mit dem folgenden code:
So, Sie können es verwenden, genau so, wie Sie nutzen die
GGroundOverlay
Funktion, außer dass Sie Ihre SVG-Datei erstellt werden soll mit der Mercator-Projektion (aber wenn Sie es auf kleiner Fläche, wie eine Stadt oder kleiner, werden Sie nicht sehen Sie den Unterschied).Diese Arbeit sollte mit Safari, Firefox und Opera. Sie können versuchen, mein kleines Beispiel hier
Sagen Sie mir, was wissen Sie über Sie denken.
InformationsquelleAutor der Antwort ThibThib
Diese Frage wurde bereits kurz auf die Google Maps API-Gruppe. Hier ist, was Sie sagte:
Gibt es auch ein paar Google Maps SVG-Beispiele hier und hier.
Glück!
InformationsquelleAutor der Antwort Chris B