Google Maps V3: Mise À Jour Des Marqueurs Périodiquement
J'ai suivi le PHP/MYSQL tutoriel sur Google Maps trouvé ici.
J'aimerais les marqueurs être mis à jour de la base de données toutes les 5 secondes.
C'est ma compréhension je dois utiliser Ajax pour la périodicité de mise à jour les marqueurs, mais j'ai du mal à comprendre d'où l'ajout de la fonction et de l'endroit où l'utilisation setTimeout() etc
Tous les autres exemples que j'ai trouvés ne sont pas vraiment expliquer ce qu'il se passe, quelques indications utiles serait formidable!
C'est mon code (le Même que Google exemple avec certains var changements):
function load() {
var map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(37.80815648152641, 140.95355987548828),
zoom: 13,
mapTypeId: 'roadmap'
});
var infoWindow = new google.maps.InfoWindow;
//Change this depending on the name of your PHP file
downloadUrl("nwmxml.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var host = markers[i].getAttribute("host");
var type = markers[i].getAttribute("active");
var lastupdate = markers[i].getAttribute("lastupdate");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var html = "<b>" + "Host: </b>" + host + "<br>" + "<b>Last Updated: </b>" + lastupdate + "<br>";
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon,
shadow: icon.shadow
});
bindInfoWindow(marker, map, infoWindow, html);
}
});
}
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
function doNothing() {}
J'espère que quelqu'un pourra m'aider!
Vous devez vous connecter pour publier un commentaire.
Veuillez noter que je n'ai pas testé ce que je n'ai pas de db avec xml pratique
Tout d'abord, vous devez diviser votre fonction load() dans une fonction qui initialise la carte & charge les marqueurs sur domready et une fonction que vous utiliserez plus tard pour traiter le xml & mise à jour de la carte avec de. Ce qui doit être fait afin de ne pas réinitialiser la carte sur chaque chargement.
Ensuite, vous devez décider quoi faire avec les marqueurs qui sont déjà dessinés sur la carte. Pour ce faire, vous devez les ajouter à un tableau que vous l'ajouter à la carte. Sur la deuxième mise à jour, vous avez le choix soit de redessiner les marqueurs (reconstruire la matrice) ou simplement mettre à jour le tableau existant. Mon exemple montre le scénario où vous avez simplement à effacer les vieux marqueurs de l'écran (ce qui est plus simple).
data is not defined - downloadUrl("nwmxml.php", processXML(data));
Il semble qu'il ne peut pas obtenir les données XML à partir du script php?var infoWindow = new google.maps.InfoWindow;
ligne de sorte que l'infoWindow
variable est dans la portée globale, permettant la fenêtre d'informations apparaît. Il se ferme à chaque actualisation, mais je suis sûr qu'il y est un moyen tour sur ce, merci encore à tous pour votre aide!