it-roy-ru.com

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

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

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

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

31
nefo_x

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

24
Wai Yip Tung

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

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

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

Правка: глупый мой декремент

Правка: map.getBounds () должно быть, было map.getBounds

19
borbulon

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

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

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

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