it-swarm.dev

Como obter todos os marcadores visíveis no nível de zoom atual

Aqui estão alguns pontos:

  1. Eu tenho alguns marcadores no mapa e registros associados a ele no painel direito, além do mapa. Eles estão conectados via id numérico, que é armazenado como uma propriedade do marcador.
  2. Todos os marcadores são armazenados em uma matriz.
  3. Quando o usuário aumenta o zoom no mapa, os registros associados a apenas marcadores visíveis devem ser mostrados no painel direito.

Então, como obter a lista de todos os marcadores visíveis no nível de zoom atual? Eu pesquisei pela internet e não encontrei algo útil. Algum tipo do que estou tentando alcançar pode ser encontrado aqui

31
nefo_x

Use GMap2.getBounds() para encontrar a caixa delimitadora. O uso GLatLngBounds.containsLatLng() para verificar cada marcador para ver se é visível.

24
Wai Yip Tung

Na API JavaScript do Google Maps V3, podemos usar algo assim:

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

Eu sei que você queria API V2, mas eu tive que corrigir algumas coisas que vi na resposta do @bruha para V3, no caso de alguém vir procurando por ele:

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

retroceder através da matriz dessa forma percorre a matriz de marcadores mais rapidamente, além de definirmos os limites em uma variável antes de entrar no loop, de modo que não a solicitemos toda vez que passarmos pelo loop, e a única solicitação que tivermos make é se o marcador específico está dentro dos limites.

EDIT: goofed meu decrementer

EDIT: map.getBounds () deve ser, foi map.getBounds

19
borbulon

É um código fácil. Tente 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;
}
1
Jignesh Goyani

Meu trecho 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;
}
0
Lukas Hanacek