2010-05-25 10 views
29

He aquí algunos puntos:Como llegar todos los marcadores visibles en el nivel de zoom actual

  1. tengo algunos marcadores en el mapa y los registros asociados a ella en el panel derecho, además del mapa. Se conectan a través de una identificación numérica, que se almacena como una propiedad de marcador.
  2. Todos los marcadores se almacenan en una matriz.
  3. Cuando el usuario amplía el mapa, los registros, asociados a solo los marcadores visibles se deben mostrar en el panel derecho.

Entonces, ¿cómo obtener la lista de todos los marcadores visibles en el nivel de zoom actual? He buscado en Internet y no encontré algo útil. Se puede encontrar algún tipo de lo que estoy tratando de lograr here

Respuesta

22

Usa GMap2.getBounds() para encontrar el cuadro delimitador. El uso GLatLngBounds.containsLatLng() para verificar cada marcador para ver si es visible.

+0

gracias, funcionó. para otros buscadores de soluciones, no olvide pasar GMarker.getLatLng() –

44

En JavaScript de Google Maps V3 API podemos usar algo como esto:

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

Sé que querías V2 API, pero he tenido que corregir algunas cosas que vi en respuesta @ de Bruha para V3, en caso de que alguien viene en busca de ella:

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

ir hacia atrás a través de la matriz de esta manera pasa a través de la matriz de marcadores rápidos, además de que estableció los límites en una variable antes de entrar en el bucle así que no estamos solicitando que cada vez que nos pasar por el ciclo, y la única solicitud que tenemos que hacer es si El marcador específico se encuentra dentro de los límites.

EDIT: metió la pata mi decrementador

EDIT: debe ser() map.getBounds, era map.getBounds

+0

gracias. funcionó para android .. –

+0

¿Alguna idea de qué sería lo mismo para v2? –

+2

¿Por qué retroceder a través de la matriz más rápido? – jayp

1

Es fácil de código. Prueba este código

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

Mi fragmento de código

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; 
} 
Cuestiones relacionadas