Google maps api 3 再次调用xml文件时更新infowindows

Google maps api 3 再次调用xml文件时更新infowindows,google-maps-api-3,xml-parsing,infowindow,Google Maps Api 3,Xml Parsing,Infowindow,早上好 我有下一个代码,它在一个xml文件的映射中放置了一些标记,每5秒钟我再次调用xml文件并更新标记的位置,但问题是信息窗口没有更新。有人知道如何更新它们吗= 这里有代码: //<![CDATA[ var side_bar_html = ""; var gmarkers = []; var map = null; var markerclusterer = null; function myclick(i) { google.maps.event.trigg

早上好

我有下一个代码,它在一个xml文件的映射中放置了一些标记,每5秒钟我再次调用xml文件并更新标记的位置,但问题是信息窗口没有更新。有人知道如何更新它们吗=

这里有代码:

//<![CDATA[

var side_bar_html = ""; 


var gmarkers = []; 

var map = null;
var markerclusterer = null;




function myclick(i) {
    google.maps.event.trigger(gmarkers[i], "click");
    map.setZoom(map.getZoom()+2); 
}

function initialize() {
    // create the map
    var myOptions = {
        zoom: 12,
        center: new google.maps.LatLng(37.169619,-3.756981),
        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);
}
function getMarkers() {
    google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
    });


    downloadUrl("vehiculos.asp", function(doc) {
        var xmlDoc = xmlParse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
            // obtain the attribues of each marker
            var lat = parseFloat(markers[i].getAttribute("lat"));
            var lng = parseFloat(markers[i].getAttribute("lng"));
            var point = new google.maps.LatLng(lat,lng);
            var imei = markers[i].getAttribute("imei");
            var alias = markers[i].getAttribute("alias");
            var speed= markers[i].getAttribute("speed");
            var timestamp= markers[i].getAttribute("timestamp");
            var estado= markers[i].getAttribute("estado");
            var conectado= markers[i].getAttribute("conectado");
            var altitude= markers[i].getAttribute("altitude");
            var angle= markers[i].getAttribute("angle");
            var html="<b>"+alias+" "+speed+" km/h <br/> "+timestamp;


            var marker = createMarker(point,alias+" "+imei,html,estado,alias, speed, timestamp, altitude, angle);
        }   
        markerCluster = new MarkerClusterer(map, gmarkers);

    });
}
var infowindow = new google.maps.InfoWindow(
{ 

    size: new google.maps.Size(150,60)
});

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

    downloadUrl("vehiculos.asp", function(doc) {
        var xmlDoc = xmlParse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
            // obtain the attribues of each marker
            var lat = parseFloat(markers[i].getAttribute("lat"));
            var lng = parseFloat(markers[i].getAttribute("lng"));
            var point = new google.maps.LatLng(lat,lng);
            var imei = markers[i].getAttribute("imei");
            var alias = markers[i].getAttribute("alias");
            var speed= markers[i].getAttribute("speed");
            var timestamp= markers[i].getAttribute("timestamp");
            var estado= markers[i].getAttribute("estado");
            var conectado= markers[i].getAttribute("conectado");
            var altitude= markers[i].getAttribute("altitude");
            var angle= markers[i].getAttribute("angle");

            var html="<b>"+alias+" a "+speed+" km/h <br/> "+timestamp;


            var newLatLng = gmarkers[i].setPosition(point,alias+" "+imei,html,estado,alias,speed,timestamp,altitude,angle);


        }   
        markerCluster = new MarkerClusterer(map, gmarkers); 
    });

}, 5000);
//finish updateMarkers

function createMarker(latlng, imei, html, estado, alias, speed, timestamp, altitude, angle) {
    if(estado == 1)
        image = '/artworks/icons/truck_green3.png';
    else
        image = '/artworks/icons/truck_red.png';

    var textoLabel= alias+" speed: "+ speed+" km/h";
    var contentString = html;
    var newLatLng = new MarkerWithLabel({
        position: latlng,
        icon: image,
        // map: map,
        draggable: true,

        flat: true,
        labelContent: textoLabel,
        labelAnchor: new google.maps.Point(40, 0),
        labelClass: "labels", // the CSS class for the label
        labelStyle: {
            opacity: 0.50
        },
        zIndex: Math.round(latlng.lat()*-100000)<<5
    });

    google.maps.event.addListener(newLatLng, 'click', function() {
        infowindow.setContent(timestamp + alias); 
        infowindow.open(map,newLatLng);
    });

    gmarkers.push(newLatLng);

// side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + imei +'<\/a><br>';
}

/您没有在setInterval函数中分配事件处理程序,因此没有信息窗口

创建标记后,将此代码添加到setInterval()

        google.maps.event.addListener(newLatLng, 'click', function() {
        infowindow.setContent(timestamp + alias); 
        infowindow.open(map,newLatLng);

这可能会导致在循环中出现闭包问题。因此,您可以执行类似于本文中的解决方案的操作。

您的意思是信息窗口不会在第二次更新,还是它们也不会在第一次更新时显示任何内容?您好,Cdeez。我的意思是第二次,第一次正确加载。具体在哪里?如果我添加到该位置,结果是在
var newLatLng=gmarkers[i].setPosition(点、别名+“”+imei、html、estado、别名、速度、时间戳、高度、角度)之后不显示地图。但是,您需要检查事件侦听器中变量的范围,我只是从其他位置复制粘贴的表单。它现在可以执行一些操作,但是当xml重新加载出现在标记中时,另一个信息窗口来自另一个标记。抱歉,Cdeez。问题是现在加载的信息窗口来自另一个标记。更确切地说,它只加载数组中最后一个信息窗口