2009-05-11 9 views
3

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.

Antwort

1

Das 'geänderte' Ereignis wird nur ausgelöst, wenn Marker sich geändert haben, also würde es sicherlich Fälle geben, in denen kleine Bewegungen nichts verändern. Der MarkerManager erweitert seine Arbeitsgrenzen beträchtlich, um die Bewegung zu erleichtern (er zeigt Marker, die außerhalb der Karte liegen, innerhalb einer bestimmten Entfernung).

1

Sie müssen das "idle" -Ereignis abhören, das ausgelöst wird, wenn die Karte nach dem Verschieben oder Zoomen inaktiv wird.

google.maps.event.addListener(map, 'idle', function() { 
    var bounds = map.getBounds(); 
    ... 
}); 
0

der Marker zunächst Get müssen Sie die Grenzen des aktuellen Ansichtsfenster finden dann müssen Sie eine Schleife alle Markierungen und sehen, ob sie enthält in der gebundenen sind. Das Folgende ist ein Beispiel.

var bounds = map.getBounds();

for(var i = 0; i < markers.length; i++){ // looping through my Markers Collection   
if(bounds.contains(markers[i].position)) 
console.log("Marker"+ i +" - matched"); 
}