2010-05-25 3 views
29

Voici quelques points:Comment obtenir tous les marqueurs visibles au niveau de zoom

  1. J'ai quelques marqueurs sur la carte et les dossiers qui lui sont associés sur le panneau de droite en plus de la carte. Ils sont connectés via un identifiant numérique, qui est stocké en tant que propriété du marqueur.
  2. Tous les marqueurs sont stockés dans un tableau.
  3. Lorsque l'utilisateur zoome sur la carte, les enregistrements associés à des marqueurs visibles uniquement 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 pas trouvé quelque chose d'utile. Une sorte de ce que j'essaye de réaliser pourrait être trouvé

Répondre

22

Utilisez GMap2.getBounds() pour trouver le cadre de sélection. L'utilisation GLatLngBounds.containsLatLng() pour vérifier chaque marqueur pour voir si elle est visible.

+0

merci, cela a fonctionné. pour d'autres demandeurs de solution, n'oubliez pas de passer GMarker.getLatLng() –

44

Dans V3 Google Maps API JavaScript 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] 
    } 
} 
18

Je sais que vous vouliez API V2, mais j'ai dû corriger certaines choses que j'ai vu dans la réponse de @ Bruha pour V3, au cas où quelqu'un vient le chercher:

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

aller en arrière dans le tableau de cette façon passe par l'ensemble des marqueurs plus rapides, plus nous avons fixé les limites dans une variable avant d'entrer dans la boucle pour que nous ne sommes pas demander à chaque fois que nous passer par la boucle, et la seule demande que nous devons faire est si Le marqueur spécifique se trouve à l'intérieur des limites.

EDIT: gaffé mon décrémenteur

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

+0

merci. cela a fonctionné pour android .. –

+0

Une idée de ce que la même chose pour la v2 ressemblerait? –

+2

Pourquoi est-ce que revenir en arrière passe plus vite dans le tableau? – jayp

1

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

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; 
} 
Questions connexes