6

Sto provando un'implementazione di base di indicatori di clustering su una mappa di Google utilizzando lo Google Maps Utility Library v3.L'oggetto non ha metodo 'getPosition' quando si raggruppano gli indicatori di mappa di Google (api v3)

Quando eseguo questo, però, si ottiene un errore sulla console Developer Tools Chrome:

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

Ciò si riferisce alla linea 649 nello script libreria di utilità qui: http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer.js. Quale è la seguente funzione:

/** 
* 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()); 
}; 

Il codice che sto utilizzando è ragionevolmente standard di roba mappe di Google, la funzione principale per la quale è:

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(); 
     } 
    }); 
    } 
} 

Ho rintracciato la funzione erroring indietro per quanto come ho capito e dovrebbe essere la ricezione di coordinate per i bordi della mappa per essere in grado di determinare i limiti, che dovrebbe essere solo un comportamento standard, ma chiaramente qualcosa non va bene.

Mi chiedevo se qualcuno potesse far luce su questo?

Grazie per tutti i puntatori gente ...

risposta

4

Il problema si è rivelato essere il fatto che io dichiarava lo script markerclusterer prima mappa la google script. Chiamare lo script delle mappe per primo ha risolto ... ovvio ora!

+3

Nel tuo post non c'erano abbastanza informazioni che qualcuno potesse aiutarti. – geocodezip

+2

Con il senno di poi hai ragione, ma non mi rendevo conto che era il problema - pensavo che il problema fosse con la mia funzione o con la biblioteca del cluster. – Dan

+0

Dubito che l'ordine sorgente sia stato il problema, ho incluso il mio file markerCluster.js prima dello script api, come si dice in [i documenti] (https://developers.google.com/maps/documentation/javascript/marker -clustering) e tutto funziona perfettamente. Probabilmente c'era un altro problema. – stephenmurdoch

4

Il MarkerClusterer prevede una serie di marcatori. Ne crei uno, ma passa l'array degli articoli nel suo costruttore. Cambio:

var markerCluster = new MarkerClusterer(map, items); 

a:

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

Grazie - questo potrebbe aver causato un problema, quindi grazie per averlo indicato. Cambiarlo non ha comunque influenzato l'errore originale, cosa che è comunque accaduta anche quando si utilizzava 'markersArray' nella funzione. Ho effettivamente trovato la soluzione al problema originale e ho aggiunto una risposta al post originale. Grazie ancora per il tuo aiuto: probabilmente questo sarebbe stato il mio prossimo numero;) – Dan

Problemi correlati