Автоматическая смена значка маркера Google Maps

Мне нужно автоматически менять значки marker Карт Google на основе внутреннего содержимого автоматически обновляемого элемента DOM.

Я просмотрел документацию для addListener и addDomListener, но это все наведения мыши, щелчки и прочее. Мне он нужен, чтобы обнаружить изменение чистого HTML-содержимого рассматриваемого элемента, и, если это значение соответствует определенным условиям, изменить значок маркера на его основе.

Вот код, который я использую:

infowindow=new google.maps.InfoWindow();
for (i=0;i<buildings.length;i++){
    marker=new google.maps.Marker({
        position:new google.maps.LatLng(buildings[i][4],buildings[i][5]),
        map:map,
        shadow:shadow,
        icon:greenIcon,
        title:buildings[i][0]+" \n"+buildings[i][1],
        zIndex:buildings[i][6]
    });
}

Я думаю о добавлении setInterval в сочетании с jQuery, чтобы заставить значение массива buildings[i][7] (не включено выше) равняться содержимому рассматриваемого div, а затем запустить несколько условных операторов, чтобы определить, соответствует ли он правильным критериям для изменения значок маркера.

Но после этого я не понимаю, как заставить маркер действительно измениться на основе динамически обновляемого значения.


person InterfaceGuy    schedule 27.04.2012    source источник


Ответы (2)


Чтобы установить значок, связанный с Marker, попробуйте функцию Marker.setIcon. Он принимает один параметр, который может быть либо:

  1. string, который содержит относительное расположение файла изображения значка (как в вашем коде), ИЛИ -
  2. MarkerImage, который дает вам больше контроля (привязка, происхождение, размер, и т. д.) над тем, как отображается изображение значка
person Sean Mickey    schedule 01.05.2012
comment
Спасибо. Это часть того, что я искал (я также нашел его по адресу stackoverflow.com/questions/1941260/) ... но есть ли способ обнаружить изменение Элемент DOM (который вызовет изменение), или мне просто нужно будет поместить его на setInterval? Я бы предпочел не делать этого, если мне не придется. - person InterfaceGuy; 01.05.2012
comment
Что ж, поскольку нет никакого способа получать уведомления об изменениях элементов, вам придется либо: опросить элемент (используя setInterval, если хотите), либо использовать механизмы привязки данных, которые мы обсуждали по вашему другому вопросу: stackoverflow.com/q/10355852/1314132. - person Sean Mickey; 01.05.2012
comment
Спасибо, Шон. Ваша помощь была незаменима. :) - person InterfaceGuy; 02.05.2012

из документации google api

  var beachMarker = new google.maps.Marker({
      position: myLatLng,
      map: map,
      icon: image
  });
  map.addOverlay (beachMarker );
person gorelative    schedule 27.04.2012
comment
Положит ли это совершенно новый маркер поверх старого? Я не хочу этого; Я хочу отключить тот, который у меня уже есть. - person InterfaceGuy; 27.04.2012