Tengo 2 marcadores con las mismas coordenadas, así que estoy tratando de aproximar sus coordenadas para que ambos se muestren. Tengo el siguiente código que no parece funcionar. Lo extraño es que en la consola del navegador ni siquiera veo ningún error. Nada, pero no se muestra ningún marcador en absoluto.

for (var i = 0; i < locations.length; i++) {
    var item = locations[i];
    var a = 0.01;
    var newLat = item[1] + -.00004 * Math.cos((+a*i) / 180 * Math.PI);  // x
    var newLng = item[2] + -.00004 * Math.sin((+a*i) / 180 * Math.PI);  // Y
    var finalLatLng = new google.maps.LatLng(newLat,newLng);

    var marker = new google.maps.Marker({
        position: finalLatLng,
        map: map,
        title: item[0],
        link: item[3],
        address: item[5],
        phone: item[6],
        mobile: item[7],
        website: item[8],
        image: item[9],
        readmore: item[10],
        icon: item[11],
        type: item[12],
        infoWindowIndex: i
    });

    marker.category = locations[i][12];
    gmarkers.push(marker);

    google.maps.event.addListener(marker, 'click', function (event) {

        var ua = navigator.userAgent;
        var event = (ua.match(/iPad/i)) ? "touchstart" : "click";

        // prevent ghost clicks on ipad
        infoBox.setContent('<div class="marker-wrapper animated fadeInDown"><div class="marker-title"> <a href="'+ this.link +'">'+ this.title +'</a> </div><div class="marker-content"><div class="two_third popup-content"><ul>'+ this.address +''+ this.phone +''+ this.mobile +''+ this.website +'</ul></div>'+ this.image +''+ this.readmore +'<div class="clearboth"></div> <div class="close" onClick=\'javascript:infoBox.close();\'><span class="icon-cancel"></span></div></div><span class="icon-down-dir"></span></div>');

        infoBox.open(map, this);
        map.setCenter(this.position);
        map.panTo(this.position);


    }); // end click even
} //end for

Alguna otra información:
Estoy usando JSON para obtener la información de marcadores
Estoy usando MarkerClusterer para grupos.

También he intentado editar el código de esta manera pasando una nueva var al parámetro de posición y obtengo el error **Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: not an Object**.

for (var i = 0; i < locations.length; i++) {
    var item = locations[i];

    var myLatLng = new google.maps.LatLng(item[1], item[2] );

    var marker = new google.maps.Marker({
        position: myLatLng + (Math.random() -.5) / 1500,
        map: map,
        title: item[0],
        link: item[3],
        address: item[5],
        phone: item[6],
        mobile: item[7],
        website: item[8],
        image: item[9],
        readmore: item[10],
        icon: item[11],
        type: item[12],
        infoWindowIndex: i
    });

    marker.category = locations[i][12];
    gmarkers.push(marker);

    google.maps.event.addListener(marker, 'click', function (event) {

        var ua = navigator.userAgent;
        var event = (ua.match(/iPad/i)) ? "touchstart" : "click";

        // prevent ghost clicks on ipad
        infoBox.setContent('<div class="marker-wrapper animated fadeInDown"><div class="marker-title"> <a href="'+ this.link +'">'+ this.title +'</a> </div><div class="marker-content"><div class="two_third popup-content"><ul>'+ this.address +''+ this.phone +''+ this.mobile +''+ this.website +'</ul></div>'+ this.image +''+ this.readmore +'<div class="clearboth"></div> <div class="close" onClick=\'javascript:infoBox.close();\'><span class="icon-cancel"></span></div></div><span class="icon-down-dir"></span></div>');

        infoBox.open(map, this);
        map.setCenter(this.position);
        map.panTo(this.position);


    }); // end click even
} //end for

¿Alguna idea de cómo solucionar este problema?

-1
alex05 29 ago. 2014 a las 18:03

2 respuestas

La mejor respuesta

Esto no funcionará:

   position: myLatLng + (Math.random() -.5) / 1500,

MyLatLng es un google.maps.LatLng, no puede agregar un número, esto podría funcionar (no probado):

   position: new google.maps.LatLng(myLatLng.lat() + (Math.random() -.5) / 1500,
                                    myLatLng.lng() + (Math.random() -.5) / 1500),   
0
geocodezip 29 ago. 2014 a las 14:46

Agregar el marcador a un mapa es un proceso simple.

  • Primero debe tener la instancia del mapa, no veo eso en su código, tal vez sea antes del código. Parece que:

    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  • Tal vez suene tonto, pero debes asegurarte de que este código se esté ejecutando, ya sea que lo hayas ejecutado dentro de un proceso de inicialización o si disparaste a través de un evento.

  • La otra cosa es si puede verificar el resultado de su cálculo de latitud y longitud, solo para asegurarse de que esos números estén dentro del rango válido.

  • Además, el constructor del objeto Google LatLng es LatLng (doble, doble), así que asegúrese de no pasar un objeto o incluso una cadena, debería verse así:

    var myLatlng = nuevo google.maps.LatLng (-25.363882,131.044922);

0
Chris Rosete 29 ago. 2014 a las 14:44