Иконата на маркер на Google Карти се променя автоматично

Трябва автоматично да променя иконите на Google Карти marker въз основа на вътрешното съдържание на автоматично актуализиращ се 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