Bonjour,

Je rencontre des difficultés lorsque je tente d'afficher un KML sur une carte.

Toutes les X secondes (ici 5 pour les tests) je lis un fichier KML auto généré par une appli sur un de mes FTP.

Dans ce KML il n'y a qu'un point à afficher.
Le champs description du KML contient également les coordonnées GPS.

Je compare ensuite les coordonnées du point du 1er KML chargé avec le siuvant, et si ces coordonnées changent, alors je dois mettre à jour la map.

J'avoue que je ne suis pas à l'aise avec les fonctions asynchrones, pouvez m'aiguiller svp afin que le nouveau KML veuille bien s'afficher dans les conditions ci-dessus ?


Je suis preneur de toute aide, je commence à devenir chauve à force de galérer sur javascript

Ci-dessous mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
var map;
var gx = [];
var kmlLayerOptions = {preserveViewport:true};
var lastPos = ""; 
 
function initialisation() {
	var mapDiv = document.getElementById("map_canvas");
 
	var latlng =new google.maps.LatLng(45.0000, 5.0000);
	var myOptions = {
		zoom: 14,
		center:  latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	var map = new google.maps.Map(mapDiv, myOptions);
 
	gx[0]=new google.maps.KmlLayer("http://......generated_file.kml?"+aleat(),kmlLayerOptions);
	gx[0].setMap(map);
 
	var timer = setInterval(function(){reloadKml(map)}, 5000);
}
 
google.maps.event.addDomListener(window, 'load', initialisation);
 
function reloadKml(aMap) {
	//on charge un nouveau KML 
	gx[1]=new google.maps.KmlLayer("http://......generated_file.kml?"+aleat(),kmlLayerOptions);
 
	//Attente du chargement complet et lecture de l'attribut "description" du KML dans lequel j'ai également stocké les coordonnées lat / lon en amont
	google.maps.event.addListenerOnce(gx[1], 'metadata_changed', function(){ 
		result = gx[1].getMetadata();
		newPos = result.description;
 
		if (newPos != lastPos){
			alert("Position différente");
			//on enleve l'ancien KML de la map et on affiche le nouveau
			lastPos = newPos;
 
			// -- Tentative d'afficher le KML si la position est différente
			gx[0].setMap(null); 
			gx[1].setMap(aMap);
			gx[0] = gx[1];
			//mais il ne se passe rien ...
 
		}else{
			alert("Position identique");
			//on ne fait rien 
		}
	}); 
 
}
 
function aleat(){
	return Math.round(Math.random() * 1000000);
}