Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Strano comportamento ciclo GoogleMap

    Salve,
    stavo cercando di sviluppare qualcosa sfruttando GoogleMaps.

    Nonostante il codice mi sembri corretto; mi pare che si comporti in maniera alquanto anomala; infatti le infowindows mi vengono visualizzate tutte con le informazione dell'ultimo elemento del vettore; posto un pò di codice per farvi vedere:


    codice:
        
        var map;
    	
    	function initialize() 
    	{
    		var mapOptions = {
              center: new google.maps.LatLng(40.320373, 9.324818),
              zoom: 8,
              mapTypeId: google.maps.MapTypeId.HYBRID 
            };
            map = new google.maps.Map(document.getElementById("map_canvas"),
                mapOptions);
          
    	
    		
    		var ROSSO = "ROSSO.png";		
    		var VERDE = "VERDE.png";		
    		var ORO = "ORO.png";		
    		var BLU = "BLU.png";
    
    		var Riga0 = new Array("S&C", "Santa Barbara", "Auchan", "Tutto Dolci", "Gianburrasca", "La melacotogna", "MieleAmaro", "Il viandante", "Il cerchio", "La Pola");
    		var Riga1 = new Array("Sanluri", "Sardara", "Piazza Italia 1, Sassari", "viale Sant'Avendrace 26, Cagliari", "via Ospitone 1, Seulo", "viale villa di chiesa 1, Iglesias", "via liguria 5, Oristano", "via dei lidi 1, Olbia", "Via Cirenaica 1, Ozieri", "Via Piemonte 1, Tortolì");
    		var Riga3 = new Array("Fatturato: 5.654,78 EURO", "Fatturato: 10.654,78 EURO", "Fatturato: 1.254,78 EURO", "Fatturato: 3.456,22 EURO", "Fatturato: 950,52 EURO", "Fatturato: 6.357,99 EURO", "Fatturato: 5.654,78 EURO", "Fatturato: 5.654,78 EURO", "Fatturato: 5.654,78 EURO", "Fatturato: 5.654,78 EURO");
    		
    		var Colore = new Array(ROSSO, VERDE, ORO, BLU, BLU, BLU, ORO, ROSSO, VERDE, VERDE);
    		
    		var Immagine = "[img]neg.jpeg[/img]";
    				
    		var contentString = "";
    		
    		var geocoder = new google.maps.Geocoder();
    		
    		
    		
    		var i=0;
    
    		for(i=0; i<Riga1.length; i++)
    		{	
    			var contentString = "
    
    "+Riga0[i]+"</p>
    
    "+Riga1[i]+"</p>
    
    "+Riga3[i]+"</p>
    
    " + Immagine + "</p>";		
    			
    			geocoder.geocode({ 'address': Riga1[i]}, function(results, status)
    													{
    													
    														
    		
    														var marker = new google.maps.Marker
    																	({ map: map, 
    																	   position: results[0].geometry.location,
    																	   title: Riga3[i],  
    																	   icon: Colore[i]
    																	});
    																													
    														var infowindow  = new google.maps.InfoWindow({
    																										content: contentString
    																									});
    														
    														alert(i);
    														bindInfoW(marker, infowindow);
    													}
    							);     
    		}
    		
    		map.addControl(new GOverviewMapControl());
    		map.addControl(new GMapTypeControl());
    		map.addControl(new GLargeMapControl());
    		map.setUIToDefault();	
    	}	
    	
    
    	function bindInfoW(marker, infowindow)
    	{
    		google.maps.event.addListener(marker, 'click', function() {
    																	//infowindow.setContent(contentString);
    																	infowindow.open(map, marker);
    																});
    	}
    Ogni popolo ha il governo che si merita...

  2. #2
    a) formatta bene il codice la prossima volta
    b) non e' strano, e' esattamente come funziona JavaScript, e' un problema di closure, ed e' un errore molto molto comune: http://james.padolsey.com/javascript...in-javascript/
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Potrebbe essere perché sovrascrivi la variabile contentString prova aggiungendo + di concatenamento var contentString += "

    "+Riga0[i]+"</p>....
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    Mi scuso per la formattazione

    1. Per quanto riguarda le Closures, allora se ho ben capito dovrei risolvere dichiarando esternamente(diciamo come globali) le variabili marker e infowindow che stanno all'interno della function(results, status); ma non sembra funzionare.

    2. Per quanto riguarda invece la concatenazione, in quel modo otterrei tutte le informazioni raccolte nell'array all'interno di tutte le infowindow.
    Ogni popolo ha il governo che si merita...

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    51
    Ma sei sicuro di non mischiare le api v3 con quelle v2???
    codice:
    map.addControl(new GOverviewMapControl());
     map.addControl(new GMapTypeControl());
     map.addControl(new GLargeMapControl());
    Questi controlli se non mi sbaglio fanno riferimento alla vecchia documentazione.

  7. #7
    Allora...

    Avevo già letto quel pezzettino di codice all'interno del Forum, ma non mi sembra sia lo stesso problema, ossia, cosa ci sarebbe di sbagliato nel mio da compromettere così il ciclo e quindi il contenuto di quella variabile?

    Paradossalmente se vado a stampare la i; a ciascun giro del ciclo viene stampato come valore della variabile 10, cioè la fine del vettore!!
    Ogni popolo ha il governo che si merita...

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    a me sembra lo stesso problema, nell'infowindow vedi sempre il testo dell'ultimo elemento, come succedeva all'altro utente, cmq riposta il codice ben formattato, cosi ci si può dare un occhiata senza diventare strabici

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    51
    si fai come dice vindav prova a mettere anche quello che vedi dal browser.

  10. #10
    Allora... ho provato ad applicare il codice che mi avete segnalato... ma come immaginavo non cambia nulla!

    Perchè ad ogni passaggio la i è già valorizzata a 10, ossia di una grandezza superiore rispetto alla dimensione del vettore; cioè stà già fuori!

    Io non capisco perchè il ciclo for si comporti in questo modo.

    Forse ho interpretato male il closure?

    Vi posto il nuovo codice

    codice:
    var i=0;
    
    for(i=0; i<Riga1.length; i++)
    {	
    	contentString[i] = "
    
    "+Riga0[i]+"</p>
    
    "+Riga1[i]+"</p>
    
    "+Riga3[i]+"</p>
    
    " + Immagine + "</p>";		
    	
    	geocoder.geocode({ 'address': Riga1[i]}, function(results, status)
    																{		
    					var marker = new google.maps.Marker
    				({ map: map, 
    				   position: results[0].geometry.location,
    				   title: Riga3[i]
    				});
    																
    	/*infowindow  = new google.maps.InfoWindow();
    	
    	bindInfoW(marker, contentString, infowindow);*/
    	
    	marker.content = contentString[i];														
    	all_markers.push(marker);// insrisce il marker appena creato nell'array dei markers
    
    	var infowindow = new google.maps.InfoWindow(); // crea una finestra informativa (vignetta)
    	 
    	google.maps.event.addListener(all_markers[i], 'click', function(e) {
    			infowindow.setContent(this.content);      
    			infowindow.open(mappa, this);}															});     
    	});
    }

    Ho riportato solo la parte relativa al ciclo FOR
    Ogni popolo ha il governo che si merita...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.