API V3 Обновление позиции маркера динамически - PullRequest
3 голосов
/ 12 января 2012

У меня есть этот код, который читает данные из XML-файла и помещает маркер на карту.

Что я хочу сделать, так это автоматически читать XML-файл каждые 5 секунд и обновлять положение маркера.

Я попытался добавить setInterval к ​​функции, но проблема в том, что предыдущий маркер не удаляется. Просто добавьте еще один маркер на карту и т. Д.

(я не хочу обновлять всю карту, только маркер)

<script type="text/javascript"> 


var map = null;



function createMarker(latlng, html) {
var contentString = html;

var image = new google.maps.MarkerImage('http://www.google.com/mapfiles/markerA.png',
new google.maps.Size(20, 34),
new google.maps.Point(0,0),
new google.maps.Point(10, 34));

var shadow = new google.maps.MarkerImage('http://www.google.com/mapfiles/shadow50.png',
new google.maps.Size(37, 34),
new google.maps.Point(0,0),
new google.maps.Point(10, 34));

var marker = new google.maps.Marker({
position: latlng,
map: map,
shadow: shadow,
icon: image,
zIndex: Math.round(latlng.lat()*-100000)<<5


});

google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(contentString); 
infowindow.open(map,marker);

});

}




function initialize() {

var myOptions = {
zoom: 13,
center: new google.maps.LatLng(-18.432713,-70.317993),
mapTypeControl: true,
mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
navigationControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
}

map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);



google.maps.event.addListener(map, 'click', function() {
infowindow.close();
});



setInterval(function() { 
downloadUrl("data.xml", function(doc) {

var xmlDoc = xmlParse(doc);

var markers = xmlDoc.documentElement.getElementsByTagName("marker");

for (var i = 0; i < markers.length; i++) {

var lat = parseFloat(markers[i].getAttribute("lat"));

var lng = parseFloat(markers[i].getAttribute("lng"));

var point = new google.maps.LatLng(lat,lng);

var html = "<strong>Taxi Arica</strong></br><strong>Latitud:</strong> " +       markers[i].getAttribute("lat") + "</br><strong>Longitud:</strong> " +  markers[i].getAttribute("lng");

var marker = createMarker(point,html);

}

});

},5000);


}



var infowindow = new google.maps.InfoWindow(
{size: new google.maps.Size(150,50)});


</script> 

1 Ответ

8 голосов
/ 22 марта 2013

Чтобы обновить позицию маркера, вы должны вызвать setPosition:

   var new_marker_position = new google.maps.LatLng(53.345735, -6.259548);

   marker.setPosition(new_marker_position);
...