web-dev-qa-db-fra.com

Comment obtenir tous les marqueurs visibles sur le niveau de zoom actuel

Voici quelques points:

  1. J'ai quelques marqueurs sur la carte et des enregistrements associés sur le panneau de droite à côté de la carte. Ils sont connectés via un identifiant numérique, qui est stocké en tant que propriété de marqueur.
  2. Tous les marqueurs sont stockés dans un tableau.
  3. Lorsque l'utilisateur zoome sur la carte, les enregistrements associés aux seuls marqueurs visibles doivent apparaître dans le panneau de droite.

Alors, comment obtenir la liste de tous les marqueurs visibles sur le niveau de zoom actuel? J'ai cherché sur Internet et n'ai rien trouvé d'utile. On pourrait trouver une sorte de ce que j'essaie de réaliser ici

31
nefo_x

Utilisez GMap2.getBounds() pour trouver le cadre de sélection. Utilisez GLatLngBounds.containsLatLng() pour vérifier chaque marqueur afin de voir s’il est visible.

24
Wai Yip Tung

Dans Google Maps JavaScript API V3, nous pouvons utiliser quelque chose comme ceci:

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

Je sais que vous vouliez une API V2, mais je devais corriger certaines choses que j'avais vues dans la réponse de @ bruha à la V3, au cas où quelqu'un les chercherait:

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
    }
}

revenir en arrière dans le tableau de cette façon permet de parcourir plus rapidement le tableau de marqueurs. De plus, nous définissons les limites dans une variable avant de passer à la boucle. make est si le marqueur spécifique est à l’intérieur des limites.

EDIT: gaffe mon décrémenteur

EDIT: map.getBounds () devrait être, était map.getBounds

19
borbulon

C'est un code facile. Essayez ce 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

Mon extrait de code

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