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?
2 respuestas
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),
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);
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.