• User Attivo

    Prendere dati da XML

    Ciao,

    vorrei cambiare questo script in modo da prelevare i dati dei markers da un file Xml?

     *****************************************************
    
     <script type="text/javascript">
        //<![CDATA[
    
        // Check to see if this browser can run the Google API
        if (GBrowserIsCompatible()) {
        
        
          // ==================================================
          // A function to create a tabbed marker and set up the event window
          // This version accepts a variable number of tabs, passed in the arrays htmls[] and labels[]
          function createTabbedMarker(point,htmls,labels) {
            var marker = new GMarker(point);
            GEvent.addListener(marker, "click", function() {
              // adjust the width so that the info window is large enough for this many tabs
              if (htmls.length > 2) {
                htmls[0] = '<div style="width:'+htmls.length*88+'px">' + htmls[0] + '</div>';
              }
              var tabs = [];
              for (var i=0; i<htmls.length; i++) {
                tabs.push(new GInfoWindowTab(labels*,htmls*));
              }
              marker.openInfoWindowTabsHtml(tabs);
            });
            return marker;
          }
          // ==================================================
          
    
          var map = new GMap2(document.getElementById("map"));
          map.addControl(new GLargeMapControl());
          map.addControl(new GMapTypeControl());
          map.setCenter(new GLatLng(39.7907787, 8.9359741), 9);
        
          // ==================================================
          // Set up the tabbed markers
        
          var point = new GLatLng(39.37907787, 8.49359741);
          var marker = createTabbedMarker(point, ["Tab 1", "Tab 2","Tab 3"],["uno","due","tre"]);
          map.addOverlay(marker);
          
          var point = new GLatLng(39.47907787, 8.59359741);
          var marker = createTabbedMarker(point, ["Tab 1", "Tab 2","Tab 3","Tab 4"],["uno","due","tre","quattro"]);
          map.addOverlay(marker);
          
          var point = new GLatLng(39.67907787, 8.69359741);
          var marker = createTabbedMarker(point, ["prima riga<br>seconda riga", "prima riga<br>seconda riga"],["primo", "secondo"]);
          map.addOverlay(marker);
    
          var point = new GLatLng(39.7907787, 8.9359741);
          var marker = createTabbedMarker(point, ["qui nessun tab"],["Nothing"]);
          map.addOverlay(marker);
          
    
        }
    
        
        // display a warning if the browser was not compatible
        else {
          alert("Sorry, the Google Maps API is not compatible with this browser");
        }
        //]]>
        </script>
    *****************************************************
    

    Mi servirebbe sia la variazione di questo script sia la costruzione del file XML. Mi voglio fare una mappa personalizzata, ma non conoscendo questo tipo di linguaggio, mi sono arenato sigh sigh (che fine hanno fatto gli smiles?)

    Grazie a chi mi aiuta!


  • Super User

    Ciao, ti invito ad andare nel tuo pannello utente ed attivare da Modifica Opzioni-->Interfaccia editor messaggi l'interfaccia avanzata.

    Così puoi inserire le faccine e formattare il codice come ho modificato io...

    Riguardo allo script in questo topic ho fornito un link che spiega come leggere xml con javascript.
    http://www.giorgiotave.it/forum/html-css-scripting/14155-xml-e-javascript.html?highlight=javascript

    :ciauz:


  • User Attivo

    Ok grazie! Proverò a leggere quel link. Speriamo solo di capirci qualcosa. Ho già visto che l'esempio non si apre e io imparo più da quelli che dalla teoria.

    Ciao.


  • User Attivo

    No, non ci ho capito niente:x :arrabbiato: :arrabbiato: . Per di più ora quel sito è in manutenzione.

    Porta pazienza Seabird.:x :arrabbiato: :arrabbiato:

    :ciauz:


  • User Newbie

    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


  • User Attivo

    Ciao aleppax,

    ho appena visto la tua risposta. Purtroppo però non ci ho capito tanto, perchè non capisco quasi niente di questo linguaggio.

    Non riesco a capire neanche come vedere il tuo esempio. Se faccio coppia e incolla su una nuova pagina di frontpage, all'interno dei tags dell'html non riesco a vedere niente.

    Però ad occhio e croce non credo che sia quello che cercavo. Se ho capito bene, nel tuo codice c'è la possibilità di decidere quale marcolor vedere. E lo decidi tu nel file XML.

    Nel mio invece, devono essere a disposizione dell'utente, tutti i vari tabs. Ed è l'utente che clicca su quello che gli interessa vedere.

    Mi sarò spiegato? Boooohh!!!! Spero di si.

    Comunque ti ringrazio, anche perchè ho finalmente capito la differenza tra valori nidificati e valori figli. E' già una gran cosa.... (per me).

    :ciauz: :ciauz: :ciauz: :ciauz: :ciauz: