Ciao Seabird, stavo cercando informazioni su come migliorare il mio codice e sono incappato in questo post, forse posso darti qualche aiuto, sto usando uno script che legge un file xml e passa i valori ai markers, lo script è questo:
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
//aggiungo qualche controllo sulla mappa - da sostituire con eventi esterni sulla pagina html
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
//aggiungo un event listener per la posizione del centro
// GEvent.addListener(map, "moveend", function() {
// var center = map.getCenter();
//l'elemento "posizione" ha assegnato il valore in stringa di center
// document.getElementById("posizione").innerHTML = center.toString();
// });
//la mappa inizia centrata qui (sul centro di Alba - CN)
map.setCenter(new GLatLng(44.700863, 8.035258), 14);
var iconb = new GIcon();
iconb.image = "./iconb.png";
iconb.shadow = "./marker_shadow.png";
iconb.iconSize = new GSize(20, 34);
iconb.shadowSize = new GSize(30, 30);
iconb.iconAnchor = new GPoint(10, 34);
iconb.infoWindowAnchor = new GPoint(5, 1);
var iconr = new GIcon();
iconr.image = "./iconr.png";
iconr.shadow = "./marker_shadow.png";
iconr.iconSize = new GSize(20, 34);
iconr.shadowSize = new GSize(30, 30);
iconr.iconAnchor = new GPoint(10, 34);
iconr.infoWindowAnchor = new GPoint(5, 1);
var icong = new GIcon();
icong.image = "./icong.png";
icong.shadow = "./marker_shadow.png";
icong.iconSize = new GSize(20, 34);
icong.shadowSize = new GSize(30, 30);
icong.iconAnchor = new GPoint(10, 34);
icong.infoWindowAnchor = new GPoint(5, 1);
function createMarker(point, nome, autore, descrizione, marcolor) {
switch (marcolor) {
case "blu":
var marker = new GMarker(point, iconb);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml("<h2>" + nome + "</h2><h3>" + autore + "</h3><h4>" + descrizione + "</h4>");
});
return marker;
break;
case "rossi":
var marker = new GMarker(point, iconr);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml("<h2>" + nome + "</h2><h3>" + autore + "</h3><h4>" + descrizione + "</h4>");
});
return marker;
break;
case "verdi":
var marker = new GMarker(point, icong);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml("<h2>" + nome + "</h2><h3>" + autore + "</h3><h4>" + descrizione + "</h4>");
});
return marker;
break;
}
}
//aggiungo i marker
GDownloadUrl("data-test.xml", function(data, responseCode) {
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var point = new GLatLng(parseFloat(markers*.getAttribute("lat")),
parseFloat(markers*.getAttribute("lng")));
var nome = markers*.getAttribute("nome");
var descrizione = markers*.getAttribute("descrizione");
var marcolor = markers*.getAttribute("marcolor");
var autore = markers*.getElementsByTagName("autore")[0].firstChild.nodeValue;
map.addOverlay(createMarker(point, nome, autore, descrizione, marcolor));
}
});
}
}
//]]>
</script>
inoltre posso darti un esempio di file xml:
[html]<markers>
<marker lat="44.701850" lng="8.034644" nome="Studio Lazier" descrizione="Via Cerrato, 6 Alba (CN)" link="" marcolor="rossi">
<autore>luogo degli incontri</autore>
</marker>
<marker lat="44.702689" lng="8.030298" nome="Uffici giudiziari" descrizione="Piazza Medford, 1 Alba (CN)" link="" marcolor="blu">
<autore>Isolarchitetti</autore>
</marker>
</markers>[/html]
come vedi c'è la possibilità di impostare tre colori differenti, in base al valore marcolor dell'xml, ma puoi personalizzartelo come vuoi.
L'esempio contempla sia valori nidificati nel tag marker, che figli (cioè "autore").
Il mio problema è che non posso avere un valore nullo per autore, altrimenti il parsing si interrompe, dovrei forse mettere un controllo che se il valore non c'è lo sostituisca con qualcosa, ma non l'ho ancora fatto perchè non ho mai usato finora javascript, se qualcuno ha consigli...
ciao