6

Estoy probando una implementación básica de marcadores de clústeres en un mapa de Google utilizando el Google Maps Utility Library v3.El objeto no tiene el método 'getPosition' al agrupar marcadores de mapas de Google (api v3)

Cuando ejecuto esto, sin embargo, me sale un error en la consola de herramientas de desarrollo de Chrome:

Uncaught TypeError: Object #<Object> has no method 'getPosition' 

Esto se refiere a la línea 649 en la secuencia de comandos biblioteca de utilidades aquí: http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer.js. Que es la siguiente función:

/** 
* Determins if a marker is contained in a bounds. 
* 
* @param {google.maps.Marker} marker The marker to check. 
* @param {google.maps.LatLngBounds} bounds The bounds to check against. 
* @return {boolean} True if the marker is in the bounds. 
* @private 
*/ 
MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) { 
    return bounds.contains(marker.getPosition()); 
}; 

El código que estoy usando es relativamente uniformes en materia mapas de Google, la función principal de los cuales es:

function initialize(items,loop,zoom) { 
    geocoder = new google.maps.Geocoder(); 
    if (items.length > 0) { 
    var latlng = new google.maps.LatLng(items[0].Lat, items[0].Lng); 
    var myOptions = { 
     zoom: zoom, 
     center: latlng, 
     //mapTypeControl: false, 
     streetViewControl: false, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    map = new google.maps.Map(document.getElementById("map"), myOptions); 
    map.setOptions({styles: stylez}); 

    for (var i = 0; i < items.length; i++) { 
     var marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(items[i].Lat, items[i].Lng), 
     title: items[i].Title, 
     icon: _iconCenter, 
     shadow: shadow, 
     infocontent: items[i].Description 
     }); 
     marker.setMap(map); 
     markersArray.push(marker); 
    } 
    var markerCluster = new MarkerClusterer(map, items); 
    google.maps.event.addListener(map, "tilesloaded", function() { 
     if(loop == true){ 
     SetLoop(); 
     } 
    }); 
    } 
} 

he rastreado la función erroring atrás tanto según tengo entendido, y debería estar recibiendo coordenadas para que los bordes del mapa puedan determinar los límites, lo que debería ser solo un comportamiento estándar, pero claramente algo no está bien.

Me pregunté si alguien podría arrojar algo de luz sobre esto?

Gracias por cualquier punteros gente ...

Respuesta

4

El problema resultó ser el hecho de que yo estaba declarando el guión markerclusterer antes de la escritura de los mapas de Google. Llamar al script de mapas primero lo resolvió ... ¡ahora es obvio!

+3

No hubo suficiente información en su publicación para que nadie la ayude con eso. – geocodezip

+2

En retrospectiva, tiene razón, pero no me di cuenta de que era el problema, pensé que el problema era con mi función o con la biblioteca clusterer. – Dan

+0

Dudo que el orden de origen fuera el problema, tengo mi archivo markerCluster.js incluido antes del script de la API, como se dice en [los documentos] (https://developers.google.com/maps/documentation/javascript/marker -clustering) y todo está funcionando bien. Probablemente hubo un problema diferente. – stephenmurdoch

4

El MarkerClusterer espera una matriz de marcadores. Usted crea uno, pero pasa la matriz de elementos a su constructor. Cambio:

var markerCluster = new MarkerClusterer(map, items); 

a:

var markerCluster = new MarkerClusterer(map, markersArray); 
+0

Gracias - esto bien puede haber causado un problema, así que gracias por señalarlo. Sin embargo, cambiarlo no afectó el error original, que aún ocurrió cuando se usaba 'markersArray' en la función. De hecho, encontré la solución al problema original y agregué una respuesta a la publicación original. Gracias de nuevo por su ayuda. Probablemente este haya sido mi próximo número;) – Dan

Cuestiones relacionadas