google maps api несколько маркеров с информационными окнами - PullRequest
5 голосов
/ 02 февраля 2012

только что мои зубы запали в API карт Google.

Я пытаюсь нанести на карту пару маркеров.Готово.Однако я перерабатываю переменную / объект для каждого маркера.

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

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

var marker_obj = new google.maps.Marker({
    position: myLatlng,
    title:"This is Marker 1",
});

marker_obj.setMap(map);

marker_obj = new google.maps.Marker({
    position: myLatlng,
    title:"This is Marker 2",
});

marker_obj.setMap(map);

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

У меня есть следующие вопросы:

1: Должен ли я использовать отдельную уникальную переменную / объект для каждого маркера (накладные расходы?), если нет, как мне определить егособытие щелчка.

2: Можно ли изменить (повторно назначить) объект информационного окна с новым текстом перед его извлечением или создать уникальное информационное окно для каждого маркера?

Я немного похож на Java n00b, поэтому любая помощь будет принята с благодарностью.

Ответы [ 2 ]

10 голосов
/ 02 февраля 2012

Вы на правильных линиях.Имейте один объект информационного окна так же, как у вас есть один маркерный объект.Затем содержимое информационного окна изменяется в зависимости от того, на каком маркере вы щелкнете.Одна вещь, на которую следует обратить внимание (это также случается, если вы создаете маркеры в цикле), заключается в том, что опасность состоит в том, что все информационные окна заканчиваются содержимым последнего.Итак, давайте создадим новую функцию, которая обновляет содержимое.

Кроме того, кроме того, вам не нужно вызывать функцию setMap () для ваших маркеров, вы можете просто указать атрибут карты в опцияхВы проходите при создании маркеров.

var infowindow = new google.maps.InfoWindow({
    content: ''
});

var marker_obj = new google.maps.Marker({
    position: myLatlng,
    title:"This is Marker 1",
    map: map
});

bindInfoWindow(marker_obj, map, infowindow, 'Marker 1');

marker_obj = new google.maps.Marker({
    position: myLatlng,
    title:"This is Marker 2",
    map: map
});

bindInfoWindow(marker_obj, map, infowindow, 'Marker 2');

Тогда новая функция:

function bindInfoWindow(marker, map, infowindow, html) {
    marker.addListener('click', function() {
        infowindow.setContent(html);
        infowindow.open(map, this);
    });
} 
2 голосов
/ 02 февраля 2012

создать глобальный объект информационного окна. var infowindow = new google.maps.InfoWindow();

и добавьте слушатель для вашего глобального маркера.

google.maps.event.addListener(marker, "click", function (e) {
            infowindow.setContent("set marker specific content here");
            infowindow .open(map, this);
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...