Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: carlosuc99 en 10 Noviembre 2012, 12:47 pm



Título: Problema For en Mapa de Google Maps
Publicado por: carlosuc99 en 10 Noviembre 2012, 12:47 pm
Buenas tengo este código:

Código:
var Destinos = {
      autozoom: true,
      zoom: 5,
      center: new google.maps.LatLng(40.84706, -2.944336),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), Destinos);
       
        <?php
        for($i = 0; $i < mysql_num_rows($query); $i++){
        $lat = mysql_result($query, $i, 'Lat');
$lon = mysql_result($query, $i, 'Lon');
$icao = mysql_result($query, $i, 'ICAO');
$city = mysql_result($query, $i, 'City');
?>
       
        var Airport1 = new google.maps.InfoWindow({
        content: '<h3 align="center" style="font-family:Arial, Helvetica, sans-serif"><?php echo $icao; ?> - <?php echo $city; ?></h3>'
        });
       
       

        var image = 'http://mapicons.nicolasmollet.com/wp-content/uploads/mapicons/shape-default/color-d22328/shapecolor-color/shadow-1/border-dark/symbolstyle-white/symbolshadowstyle-dark/gradient-no/airport.png';
        var myLatLng = new google.maps.LatLng(<?php echo $lat; ?>, <?php echo $lon; ?>);
        var Airport = new google.maps.Marker({
        position: myLatLng,
        map: map,
        icon: image,
        title:"<?php echo $icao; ?> - <?php echo $city; ?>"
       
        });
       
  google.maps.event.addListener(Airport, 'click', function(){
  Airport1.open(map, Airport);
  });
 
<?php 
  }
?>
}

El problema es que el InfoWindow del Google Maps sólo me lo muestra en la última entrada de la tabla independientemente de en que marcador pulse. Ej: Tenemos 3 Ciudades: Vigo, Madrid y Barcelona (en la db están colocadas en ese ordén) si yo pulso en Vigo se me abre el InfoWindow de Barcelona, si pulso en Madrid lo mismo y si pulso en Barcelona lo mismo.


Título: Re: Problema For en Mapa de Google Maps
Publicado por: ‭lipman en 11 Noviembre 2012, 11:10 am
Claro que solo se te ve la última entrada  ;D Has enfocado tu programa.

Fíjate en el bucle que haces en PHP. Le dices a las mismas variables todo el rato que consigan un nuevo valor, por lo que leen toda la tabla, pero al final solo queda el último. Por si no me explico bien, imagina que tengo una matriz con los números del 1 al 100 ordenados, y luego hago esto:

Código
  1. foreach($matriz as $valor)
  2. $mivalor = $valor

Recorro toda la matriz, pero al final $mivalor vale el último valor, porque lo he ido sobreescribiendo con nuevos datos hasta llegar al último.

Ahora, por otra parte, no sé si el objetivo de tu mapa es tener varios infowindows y varios markers. En tal caso, tendrás que crear más, porque solo has puesto uno.

En conclusión, tu programa te coge efectivamente el último valor de la tabla y crea un solo marker, infowindow y listener.

Un saludo!