Как получить все видимые маркеры на текущем уровне масштабирования - PullRequest
31 голосов
/ 25 мая 2010

Вот несколько моментов:

  1. У меня есть несколько маркеров на карте и записи, связанные с ним на правой панели, кроме карты. Они связаны через числовой идентификатор, который сохраняется как свойство маркера.
  2. Все маркеры хранятся в массиве.
  3. Когда пользователь увеличивает масштаб карты, на правой панели должны отображаться записи, связанные только с видимыми маркерами.

Итак, как получить список всех видимых маркеров на текущем уровне масштабирования? Я искал по интернету и не нашел ничего полезного. Что-то, чего я пытаюсь достичь, можно найти здесь

Ответы [ 5 ]

47 голосов
/ 14 октября 2011

В Google Maps JavaScript API V3 мы можем использовать что-то вроде этого:

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]
    }
}
24 голосов
/ 26 мая 2010

Используйте GMap2.getBounds(), чтобы найти ограничивающую рамку. Используйте GLatLngBounds.containsLatLng(), чтобы проверить каждый маркер, чтобы увидеть, видим ли он.

19 голосов
/ 01 февраля 2012

Я знаю, что вы хотели API V2, но мне пришлось исправить некоторые вещи, которые я видел в ответе @ bruha для V3, на случай, если кто-то придет их искать:

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

при обратном перемещении по массиву этот путь проходит через массив маркеров быстрее, плюс мы устанавливаем границы в переменную перед входом в цикл, поэтому мы не запрашиваем его каждый раз, когда выполняем цикл, и единственный запрос мы должны сделать, если конкретный маркер находится внутри границ.

РЕДАКТИРОВАТЬ: тупой мой декремент

РЕДАКТИРОВАТЬ: map.getBounds () должно быть, было map.getBounds

1 голос
/ 29 августа 2016

Это простой код. Попробуйте этот код.

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 голосов
/ 16 февраля 2017

Фрагмент моего кода

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