Hier ist was ich versuche zu tun. Ich habe ungefähr 160 Orte von Interesse. Der Nutzer gibt seine Adresse (Postleitzahl, vollständige Adresse, was auch immer) ein, mit der ich Google geocodiert habe. Ich erstelle dann eine Google-Karte, die um diesen Punkt zentriert ist, und ich füge eine Markierung für jeden meiner Punkte von Interesse für die Karte hinzu (mit einem MarkerManager). So weit, ist es gut.Wie finde ich heraus, welche meiner Markierungen in meiner Google-Karte sichtbar sind?
Ich möchte eine Liste von Elementen neben der Karte anzeigen, die den angezeigten Markierungen entsprechen. Wenn der Benutzer das Fenster zieht oder vergrößert oder verkleinert, möchte ich diese Liste aktualisieren. Wenn zu viele Elemente gleichzeitig angezeigt werden, möchte ich dem Benutzer eine Nachricht anzeigen.
Was ist der beste Weg, dies zu tun? Ich habe versucht, dem MarkerManager einen Listener hinzuzufügen, damit ich bei der Änderung herausfinden konnte, welche Marker noch angezeigt wurden. Das Ereignis scheint jedoch nicht wie erwartet zu zünden, d. H. Wenn sich die angezeigten Markierungen ändern. Außerdem bezweifle ich, dass das Schleifen von über 160 Markern jedes Mal effizient sein wird.
GEvent.addListener(mgr, "changed",
function(bounds, markerCount)
{
var visibleBounds = map.getBounds();
for (var i = 0; i < gmarkers.length; i++)
{
//alert(gmarkers[i].getPoint());
if (visibleBounds.containsLatLng(gmarkers[i].getLatLng())) {
// this will need to be replaced with an ajax call
// to get the details from the server
strHtml += "<div>Another item</div>";
count ++;
}
}
alert(count);
});
Was ist der beste Weg, dies zu erreichen?
UPDATE: Dieser Code funktioniert, aber das Ereignis scheint nur ausgelöst zu werden, wenn die Karte um einen bestimmten Mindestabstand bewegt wird. Wenn der Benutzer also die Karte eine kurze Strecke zieht, scheint das Ereignis nicht ausgelöst zu werden.