Подтвердить что ты не робот

Как получить все видимые маркеры на текущем уровне масштабирования

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

Я знаю, что вы хотели 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
    }
}

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

EDIT: goofed мой декрементер

EDIT: map.getBounds() должен быть, был map.getBounds

Ответ 4

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

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

Ответ 5

Мой фрагмент кода

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