2012-02-02 3 views
4

только что мои зубы погрузились в API карт Google.google maps api несколько маркеров с информационными окнами

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

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

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

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, поэтому любая помощь будет очень признательна.

ответ

9

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

Кроме того, вам не нужно вызывать функцию 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); 
    }); 
} 
+0

эй, спасибо за код и пояснения. ваш код ломает 2-й маркер .... отображается Сначала один, а не нет информационного окна, второй маркер ушел .. Если я удалить bindInfoWindow (marker_obj, карта, InfoWindow «Маркер 1») ; линии, оба маркера показывают ... любые идеи? P.s. нет ли приятной онлайн-среды или что-то, что может помочь мне форматировать мои блоки кода Java и т. д.? –

+0

Можете ли вы просмотреть, какие ошибки javascript вы хотите получить? – duncan

+0

infowindow не определен [Break On This Error] \t bindInfoWindow (marker_obj, map, infowindow, 'Это информация для маркера 1'); –

2

создать глобальный объект InfoWindow. 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); 
     }); 
+0

Привет, я добавляю var infowindow = new google.maps.infowindow(); чуть ниже моего объявления obj map, но ошибки, которые infowindow не являются конструкторами –

+0

Это потому, что Javascript чувствителен к регистру, он должен быть InfoWindow не infowindow – duncan

+0

Спасибо, парень, получил первый рабочий процесс, также проверит ваше. –

Смежные вопросы