it-swarm.com.de

So erhalten Sie alle sichtbaren Marker auf der aktuellen Zoomstufe

Hier sind einige Punkte:

  1. Ich habe einige Markierungen auf der Karte und Datensätze, die sich im rechten Bereich neben der Karte befinden. Sie sind über eine numerische ID verbunden, die als Eigenschaft des Markers gespeichert wird.
  2. Alle Marker werden in einem Array gespeichert.
  3. Wenn der Benutzer die Karte vergrößert, sollten Datensätze, die nur sichtbaren Markierungen zugeordnet sind, im rechten Bereich angezeigt werden.

So erhalten Sie eine Liste aller sichtbaren Markierungen in der aktuellen Zoomstufe. Ich habe über das Internet gesucht und nichts Nützliches gefunden. Eine Art von dem, was ich erreichen möchte, könnte gefunden werden hier

31
nefo_x

Verwenden Sie GMap2.getBounds(), um den Begrenzungsrahmen zu finden. Verwenden Sie GLatLngBounds.containsLatLng(), um jede Markierung zu überprüfen, um zu sehen, ob sie sichtbar ist.

24
Wai Yip Tung

In Google Maps JavaScript API V3 können wir Folgendes verwenden:

var markers; // your markers
var map; // your map
for (var i=0; i<markers.length; i++){
    if( map.getBounds().contains(markers[i].getPosition()) ){
        // code for showing your object, associated with markers[i]
    }
}
47
bruha

Ich weiß, du wolltest API V2, aber ich musste einige Dinge korrigieren, die ich in @ bruhas Antwort für V3 gesehen habe, falls jemand danach sucht:

var markers; // your markers
var map; // your map

for(var i = markers.length, bounds = map.getBounds(); i--;) {
    if( bounds.contains(markers[i].getPosition()) ){
        // code for showing your object
    }
}

wenn Sie das Array auf diese Weise rückwärts durchlaufen, gehen Sie schneller durch das Array von Markierungen. Außerdem setzen wir die Grenzen in eine Variable, bevor Sie in die Schleife gehen, sodass wir sie nicht jedes Mal anfordern, wenn wir die Schleife durchlaufen, und die einzige Anforderung, die wir haben müssen make ist, wenn der bestimmte Marker innerhalb der Grenzen liegt.

EDIT: Ich habe meinen Dekrementierer vermasselt

EDIT: map.getBounds () sollte sein, war map.getBounds

19
borbulon

Es ist einfacher Code. Versuchen Sie diesen Code.

private boolean CheckVisibility(Marker marker)
{
    if(googleMap != null)
    {
        //This is the current user-viewable region of the map
        LatLngBounds latLongBounds = googleMap.getProjection().getVisibleRegion().latLngBounds;

            if(latLongBounds.contains(marker.getPosition()))
                   //If the item is within the the bounds of the screen
                  return true;
            else
                  //If the marker is off screen
                  return false;
    }
    return false;
}
1
Jignesh Goyani

Mein Code-Snippet

private boolean isAnyMarkerVisible(LatLng ll) {
    if(gMap != null && markersData != null) {
        final LatLngBounds latLongBounds = LatLngBounds.builder().include(ll).build();
        for (Store store : markersData) {
            if (latLongBounds.contains(store.getLatLng())) {
                return true;
            }
        }
    }
    return false;
}
0
Lukas Hanacek