Как мне определить, какие из моих маркеров видны на моей карте Google? - PullRequest
3 голосов
/ 12 мая 2009

Вот что я пытаюсь сделать. У меня около 160 достопримечательностей. Пользователь вводит свой адрес (почтовый индекс, полный адрес и т. Д.), Который я использую Google для геокодирования. Затем я создаю карту Google с центром вокруг этой точки и добавляю маркер для каждой из моих точек интереса на карту (используя MarkerManager). Пока все хорошо.

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

Каков наилучший способ сделать это? Я попытался добавить слушателя в MarkerManager, чтобы при его изменении я мог определить, какие маркеры все еще отображаются. Однако событие, похоже, не сработало так, как я ожидал, т. Е. При изменении отображаемых маркеров. Кроме того, я сомневаюсь, что циклирование более 160 таких маркеров каждый раз будет эффективным.

             GEvent.addListener(mgr, "changed", 
                function(bounds, markerCount) 
                {
                    var visibleBounds = map.getBounds();

                    for (var i = 0; i < gmarkers.length; i++) 
                    {
                        //alert(gmarkers[i].getPoint());
                        if (visibleBounds.containsLatLng(gmarkers[i].getLatLng())) {

                            // this will need to be replaced with an ajax call
                            // to get the details from the server
                            strHtml += "<div>Another item</div>";
                            count ++;
                        }
                    }
                    alert(count);
                });

Каков наилучший способ сделать это?

ОБНОВЛЕНИЕ : этот код работает, но событие, похоже, срабатывает только при перемещении карты на определенное минимальное расстояние. Поэтому, если пользователь перетаскивает карту на небольшое расстояние, событие, похоже, не срабатывает.

Ответы [ 3 ]

1 голос
/ 29 сентября 2012

Вам необходимо прослушать событие «idle», которое запускается, когда карта становится бездействующей после панорамирования или масштабирования.

google.maps.event.addListener(map, 'idle', function() {
  var bounds = map.getBounds();
  ...
});
1 голос
/ 14 мая 2009

Событие «изменено» срабатывает только в том случае, если маркеры изменились, поэтому, безусловно, будут случаи, когда небольшие движения ничего не изменят. MarkerManager немного расширяет свои рабочие границы, чтобы сделать вещи более плавными при перемещении (он показывает маркеры, которые находятся вне карты, на определенном расстоянии).

0 голосов
/ 08 января 2015

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

var bounds = map.getBounds ();

for(var i = 0; i < markers.length; i++){ // looping through my Markers Collection        
if(bounds.contains(markers[i].position))
 console.log("Marker"+ i +" - matched");
}
...