Почему мои маркеры не отображаются снова после сброса карты Google?

0

Я разрешаю пользователям перезагружать/повторно размещать карту. Я разместил об этом здесь.

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

Чтобы дать вам представление о том, что я говорю, вот скриншот о том, как выглядит сайт при его первом отображении:

Изображение 174551

Если я выберу другое представление из раскрывающегося списка (любое состояние или США 50+), я могу выбрать флажок или флажки, и он/они будут работать, но мой код, который должен перерисовать маркеры, на основе которых были установлены флажки щелкнули нет.

Вот код, который недавно отображает карту в качестве элемента, из раскрывающегося списка:

$('#stateSelector').on("change",function() {
    var $this = $(this).val();
    if ($this == "USA (48)")
    {
        LoadUSA48();
    }
    else if ($this == "USA (50+)")
    {
        LoadUSA50();
    }
    else if ($this == "Alabama")
    {
        LoadAlabama();
    }
    . . .
    else if ($this == "Wyoming")
    {
        LoadWyoming();
    }
});

Вот пример метода Load():

function LoadAlabama() {
    $("#map").removeData();
    $("#map").goMap({ 
        latitude: 32.806673, 
        longitude: -86.791133, 
        zoom: 8 
    }); 
}

Существует метод ReloadMarkers(), который вызывается в конце события select:

function ReloadMarkers() {
    if ($('#NFLCheckbox').is(':checked')) {
        ShowNFLMarkers();
    }

    . . .

    if ($('#AmMusiciansCheckbox').is(':checked')) {
        ShowMusiciansMarkers();
    }
}

Методы ShowX() содержат все соответствующие коды следующего типа:

$.goMap.createMarker({
    address: 'Green Bay, Wisconsin',
    title: 'Green Bay Packers',
    group: 'NFLGroup',
    icon: constants.nflIcon,
    html: getPackers()
});

Как будто проверенное состояние флажков не распознается...

Теги:
google-maps
google-maps-markers

1 ответ

1
Лучший ответ

Потому что в вашей функции LoadAlabama() карта повторно инициализируется. Маркеры были связаны со старым объектом карты. Когда вы изменяете параметр из раскрывающегося списка, новый объект карты не имеет никаких связанных с ним маркеров. Таким образом, showHide не будет работать (потому что маркеров еще нет на карте).

Лучшим решением было бы хранить значения lat-long мест в объекте или массиве, которые, как я полагаю, вы уже делаете. И когда вы повторно инициализируете карту, вам нужно перебрать маркеры и установить карту для маркеров, которые необходимо отобразить. Что-то вроде этого

function setMapForMarkers (mapMarkers) {
    $(mapMarkers).each(function(i, elm) {
        elm.setMap(myMap);
    });
}

function ReloadMarkers() {
    if ($('#NFLCheckbox').is(':checked')) {
         setMapForMarkers(NFLGroupMarkers);    //NFL Group markers should be an array containing the markers that need to be displayed.
    } else {
         //whatever set of markers you want to display here
    }

}

Вы можете обратиться к этому примеру для рабочего примера https://developers.google.com/maps/documentation/javascript/examples/marker-remove

  • 0
    Интересно; Я не вижу маркеров на этой странице; и нажатие на кнопку «Показать все маркеры» тоже не помещает ...
  • 1
    вам нужно нажать на карту, чтобы сначала уронить маркер. Все остальное будет работать после этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню