хотите получить содержимое инфопузырька маркера? - PullRequest
7 голосов
/ 26 декабря 2011

Я использую gmap v3.Я столкнулся с проблемой.Проблема в том, что я создаю динамический маркер, и в то же время я создаю информационное окно этого маркера.Теперь я хочу добавить некоторое содержимое в любое информационное окно маркера.Но не знаю, как я могу получить содержимое информационного окна.Я сохранил свои объекты маркеров в массиве, а также объекты infowindow.Но не найдено никакого решения.

Я хочу получить содержимое информационного окна на основе маркера.

EDIT:

var markerArray = new Array();
var infoArray = new Array();

function placemarker(point,id, contents){
var marker = new google.maps.Marker({
    icon: image,
    position: point, 
    map: map,
    title: name
});

markerArray[id] = marker;

var infoBubble = new InfoBubble();
var content = contents;
infoBubble.setContent(content);
google.maps.event.addListener(marker,"mouseover",function(event){
    for(var i=0; i < infoArray.length ; i++ )
    infoArray[i].close();
    infoBubble.open(map,marker);
});
infoArray.push(infoBubble);
}

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

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

Если вы уже храните все InfoWindow в своем infoArray, почему бы вам просто не сохранить их с тем же идентификатором, что и у ваших маркеров?

var markers = {};
var infoWindows = {};

function placemarker(point, id, contents) {
    var marker = ...
    ...
    markers[id] = marker;

    var infoWindow = ...
    ...
    infoWindows[id] = infoWindow;
}

(Обратите внимание, что я заменил ваши массивы хешами.) Теперь вы можете получить доступ к каждому маркеру InfoWindow (и его содержимому через getContent()) так же, как вы обращаетесь к самому маркеру.

2 голосов
/ 12 февраля 2012

Это довольно старый, но подумал, я бы попробовал

Я не уверен, что такое InfoBubble для моего примера. Я использую InfoWindow.

function createMarker(objPoint) 
{ 
    objPoint = new google.maps.LatLng(strLat, strLng);

    strFromHtml = 'Your HTML';

    //creates the window with the options
    objInfoWindow = new google.maps.InfoWindow(
    {
        content: strToHtml,
        maxWidth: 250,
        zIndex: -1
    });

    var markerOptions = 
    {
       position: objPoint,
       map: objMap
    }

    objMarker = new google.maps.Marker(markerOptions);

    //if the marker is clicked open the window
    google.maps.event.addListener(objMarker, "click", function() 
    {
        objInfoWindow.open(objMap, objMarker);
    });
}

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

EDIT

Хорошо, я перечитал ваш вопрос около 50 раз, и я надеюсь, что это хорошее решение. Что касается нескольких маркеров в одном месте, у меня нет ответа на этот вопрос. Я думаю, что у меня есть ответ для нескольких маркеров с собственной информацией. Если это не сработает, то вам придется создать пример в jsfiddle или что-то другое, иначе я не понимаю, что вы хотите. Проверьте это здесь jsfiddle

При создании информационного окна вы создаете его только один раз с содержимым по умолчанию. Так что поместите это в инициализацию самой карты. Затем при создании маркеров вы можете использовать сам маркер, чтобы он содержал html для отображения информационного окна.

var markerOptions =
{
  position: objPoint,
  map: objMap,
  html: strHtml//added to make the marker object store the content of the infowindow
}

Затем в вашем слушателе при наведении курсора вы используете this.html, чтобы получить содержимое для информационного окна

google.maps.event.addListener(objMarker, "mouseover", function()
{
  objInfoWindow.setContent(this.html);
  objInfoWindow.open(objMap, this);
});

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

1 голос
/ 18 февраля 2012

Я не думаю, что можно искать маркер на картах Google (что я думаю, это то, что вы пытаетесь сделать).

Вам нужно создать два маркера, когда они все равнона той же точке?Если нет, я бы просто отслеживал инфо-пузыри в массиве, где координаты точки являются ключом.Поэтому перед созданием нового информационного пузыря вы проверяете, есть ли он у вас, и если это так, просто замените его новым комбинированным информационным пузырем.

Вот черновик кода.

...