Estoy tratando de agregar marcadores a los mapas de Google iterando a través de una lista y recuperando información. Estoy usando la biblioteca de prototipos. El código es el siguiente:

    var point = new Array();
    var myMarkerOptions = new Array();
    var marker = new Array();

    recommendedList.each(function(item){
        point[item.location.ID] = new google.maps.LatLng(item.location.lat, item.location.lng);
        myMarkerOptions[item.location.ID] = {
              position: point[item.location.ID], 
              map: map
            };
        marker[item.location.ID] = new google.maps.Marker(myMarkerOption[item.location.ID]);    
        });     

Donde la lista recomendada es una respuesta JSON del formulario:

[
 {"artist":"artist1","location":{"lat":"50.952226","lng":"5.34832","ID":28}},
 {"artist":"artist2","location":{"lat":"52.362287","lng":"4.883965","ID":32}},
 ...
]

Sin embargo, esto no está funcionando. Sé que el problema no es sobre el JSON o el mapa de Google, porque probé una versión más simple con el siguiente código y funcionó:

      var myLatlng = new google.maps.LatLng(recommendedList[0].location.lat,recommendedList[0].location.lng);

      var marker = new google.maps.Marker({
          position: myLatlng, 
          map: map
      }); 

Entonces, el problema debe estar en la iteración y en los mapas hash. ¿Alguien puede ver el problema? ¡Gracias!

1
Bruno Morgado 17 jul. 2011 a las 18:34

3 respuestas

La mejor respuesta

Suficientemente simple para probar sin el .each

for (var i=0, item; item = recommendedList[i]; i++) {
    point[item.location.ID] = new google.maps.LatLng(item.location.lat, item.location.lng);
    myMarkerOptions[item.location.ID] = {
        position: point[item.location.ID], 
        map: map
    };
    marker[item.location.ID] = new google.maps.Marker(myMarkerOption[item.location.ID]);    
}

También puede simplificar esto bastante, a menos que "necesite" esas otras matrices:

for (var i=0, item; item = recommendedList[i]; i++) {
    marker[item.location.ID] = new google.maps.Marker({
      new google.maps.LatLng(item.location.lat, item.location.lng),
      map
    });
}
1
James 18 jul. 2011 a las 00:54

Creo que podrían ser los adaptadores de matriz que está utilizando. ¿Qué estás haciendo las matrices point, myMarkerOptions y marker una vez que hayas terminado con ellas?

¿Puedes tratar de declararlas como

var point = {};
var myMarkerOptions = {};
var marker = {};

Eso le permitirá referirse a ellos como point[item.location.ID] (etc.). Creo que con la propiedad item.ID es un número, JS está tratando de establecer ese índice numérico de la matriz, en lugar de crear una nueva propiedad en su hash.

0
Dan F 17 jul. 2011 a las 22:43

Prototipo de cada iterador no es compatible con JSON o tipo de datos de objeto.

0
Gigamegs 17 jul. 2011 a las 23:47