Voici quelques nouvelles (j'espère qu'il est préférable de les mettre ici dans une réponse, au lieu de modifier mes questions ou de créer une nouvelle question.) N'hésitez pas à la déplacer si nécessaire, ou à me le dire, peut rectifier):
Mon problème est le suivant:
var oldmap = new GGroundOverlay("test.svg", boundaries);
map.addOverlay(oldmap);
ne fonctionne pas sur Safari 3, Firefox et Opera (IE permettent pas de tirer SVG).
En fait, ce code produire l'insertion (dans un <div>
) de l'élément suivant
<img src="test.svg" style=".....">
Et Safari 4 est capable de dessiner un fichier SVG comme une image, mais ce n'est pas la façon de le faire pour l'autre navigateur. Donc, l'idée est maintenant de créer une superposition personnalisée pour le SVG, comme expliqué here.
C'est la raison pour laquelle j'ai demandé this question (Je suis désolé, mais HTML/javascript ne sont pas mes points forts).
Et comme il y a un petit bug avec Webkit pour le rendu d'un SVG avec un fond transparent avec l'élément <object>
, je dois utiliser <object>
ou <img>
en conséquence au navigateur (je ne l'aime pas, mais ... pour le moment , il est encore des expériences rapides et sale)
Alors j'ai commencé avec ce code (encore en cours):
// create the object
function myOverlay(SVGurl, bounds)
{
this.url_ = SVGurl;
this.bounds_ = bounds;
}
// prototype
myOverlay.prototype = new GOverlay();
// initialize
myOverlay.prototype.initialize = function(map)
{
// create the div
var div = document.createElement("div");
div.style.position = "absolute";
div.setAttribute('id',"SVGdiv");
div.setAttribute('width',"900px");
div.setAttribute('height',"900px");
// add it with the same z-index as the map
this.map_ = map;
this.div_ = div;
//create new svg root element and set attributes
var svgRoot;
if (BrowserDetect.browser=='Safari')
{
// Bug in webkit: with <objec> element, Safari put a white background... :-(
svgRoot = document.createElement("img");
svgRoot.setAttribute("id", "SVGelement");
svgRoot.setAttribute("type", "image/svg+xml");
svgRoot.setAttribute("style","width:900px;height:900px");
svgRoot.setAttribute("src", "test.svg");
}
else //if (BrowserDetect.browser=='Firefox')
{
svgRoot = document.createElement("object");
svgRoot.setAttribute("id", "SVGelement");
svgRoot.setAttribute("type", "image/svg+xml");
svgRoot.setAttribute("style","width:900px;height:900px;");
svgRoot.setAttribute("data", "test.svg");
}
div.appendChild(svgRoot);
map.getPane(G_MAP_MAP_PANE).appendChild(div);
//this.redraw(true);
}
...
La fonction draw
est pas encore écrit.
J'ai encore un problème (je progresse lentement, grâce à ce que je lis/apprends partout, et aussi grâce aux personnes qui répondent à mes questions).
Maintenant, le problème est le suivant: avec la balise <object>
, la carte ne peut pas être déplacée. Sur l'élément <object>
, le pointeur de la souris n'est pas "l'icône de la main" pour faire glisser la carte, mais seulement le pointeur normal.
Et je n'ai pas trouvé comment corriger cela. Dois-je ajouter un nouvel événement de souris (je viens de voir l'événement de souris quand un clic ou un double-clic s'ajoute, mais pas pour faire glisser la carte ...)?
Ou existe-t-il une autre façon d'ajouter cette couche afin de préserver la capacité de traînée?
Merci pour vos commentaires et réponses. PS: J'essaie aussi d'ajouter un à un les éléments de mon SVG, mais ... en fait ... je ne sais pas comment les ajouter dans l'arborescence DOM. Dans , le SVG est lu et analysé avec GXml.parse()
, et tous les éléments avec un nom de point donné sont obtenus (xml.documentElement.getElementsByTagName
) et ajoutés au nœud SVG (svgNode.appendChild(node)
). Mais dans mon cas, j'ai besoin d'ajouter directement l'arbre SVG/XML (ajouter tous ses éléments), et il y a différents tags (<defs>
, <g>
, <circle>
, <path>
, etc.). Il est peut-être plus simple, mais je ne sais pas comment faire .. :(
Quelle bonne question. Mon instinct est que votre deuxième approche ne fonctionnera pas, mais hésiter à répondre sans confirmer comment fonctionne gmaps avec ce volume de polylignes. Je suis impatient de voir comment cela se passe. – RedBlueThing
Se pourrait-il que GGroundOverly utilise des images de fond CSS? FF ne gère pas (encore, 3.5) les SVG comme arrière-plans. – Boldewyn
J'ai juste essayé avec FF 3.5, mais ça ne marche pas aussi. En fait, quand je regarde dans les médias téléchargés (Outils/Page Info/Media), mon SVG n'est pas chargé du tout ... – ThibThib