Ecco alcune notizie (spero sia meglio metterle qui in una risposta, invece di modificare le mie domande o creare una nuova domanda. Per favore sentitevi liberi di spostarlo se necessario, o di dirmelo, così come può rettificare):
il mio problema era il seguente:
var oldmap = new GGroundOverlay("test.svg", boundaries);
map.addOverlay(oldmap);
non ha funzionato su Safari 3, Firefox e Opera (IE non è consentono di disegnare SVG).
Infatti, questo codice produce l'inserimento (in un <div>
) del seguente elemento
<img src="test.svg" style=".....">
E Safari 4 è in grado di elaborare un file SVG come immagine, ma questo non è il modo di fare per l'altro browser. Quindi l'idea è ora di creare una sovrapposizione personalizzata per SVG, come spiegato here.
Questo è il motivo per cui ho chiesto this question (Mi dispiace, ma HTML/javascript non sono i miei punti di forza).
E dato che c'è un piccolo bug con Webkit per il rendering di una SVG con sfondo trasparente con <object>
elemento, ho bisogno di usare <object>
o <img>
di conseguenza per il browser (non mi piace, ma ... per il momento , è ancora agli esperimenti veloci-e-sporco)
Così ho iniziato con questo codice (ancora work in progress):
// 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 funzione draw
non è stato ancora scritto.
Ho ancora un problema (progredisco lentamente, grazie a ciò che leggo/apprendo ovunque, e anche grazie alle persone che rispondono alle mie domande).
Ora, il problema è il seguente: con il tag <object>
, la mappa non è trascinabile. In tutto l'elemento <object>
, il puntatore del mouse non è "l'icona della mano" per trascinare la mappa, ma solo il puntatore normale.
E non ho trovato come correggere questo. Dovrei aggiungere un nuovo evento del mouse (ho appena visto l'evento del mouse quando un clic o un doppio clic accodano, ma non per trascinare la mappa ...)?
Oppure c'è un altro modo per aggiungere questo livello in modo da preservare la capacità di trascinamento?
Grazie per i vostri commenti e risposte.
PS: Cerco anche di aggiungere uno ad uno gli elementi del mio SVG, ma ... in effetti ... non so come aggiungerli nell'albero DOM. In this example, l'SVG viene letto e analizzato con GXml.parse()
e tutti gli elementi con un determinato nome di tag vengono ottenuti (xml.documentElement.getElementsByTagName
) e aggiunti al nodo SVG (svgNode.appendChild(node)
). Ma nel mio caso, ho bisogno di aggiungere direttamente l'albero SVG/XML (aggiungere tutti i suoi elementi), e ci sono diversi tag (<defs>
, <g>
, <circle>
, <path>
, ecc.). E 'potrebbe essere più semplice, ma non so come fare .. :(
Che bella domanda. Il mio istinto è che il tuo secondo approccio non funzionerà, ma esita a rispondere senza confermare come funziona gmap con quel volume di polilinee. Non vedo l'ora di vedere come va. – RedBlueThing
Potrebbe essere che GGround utilizza le immagini di sfondo CSS? FF non gestisce (ancora, 3.5 saranno) SVG come sfondi. – Boldewyn
Ho appena provato con FF 3.5, ma non funziona, anche. Infatti, quando guardo nel supporto scaricato (Strumenti/Pagina Info/Media), il mio SVG non è stato caricato affatto ... – ThibThib