Bonjour,

je développe une application avec sencha touch, j'utilise une map pour afficher des éléments pensent dans ma base de données.

problème : la fonction de google permettant de récupérer les coordonnées avec une adresse me renvois une erreur OVER_QUERY_LIMIT.

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
57
58
59
60
61
62
63
64
65
	AfficheClie: function()
	{
		var map = Ext.getCmp('myMap').getMap();
		var view = this;
		// Set up a model to use in our Store
		Ext.define('Client', 
		{
			extend: 'Ext.data.Model',
			config: 
			{
				fields: 
				[
					{name: 'libelle', type: 'string'},
					{name: 'Adresse1', type: 'string'},
					{name: 'Adresse2', type: 'string'},
					{name: 'Adresse3', type: 'string'},
					{name: 'Codepostal', type: 'string'},
					{name: 'Ville', type: 'string'}, 	
				]
			}
		});
 
		var DataStore = new Ext.data.Store(
		{
			model: 'Client', 
			fields: ['libelle', 'Adresse1', 'Adresse2', 'Adresse3', 'Codepostal', 'Ville'],
			proxy: 
			{
				type: 'rest',
				url: 'serv/ConnectBase.php',
				actionMethods: 
				{
					read: 'POST'
				},
 
				reader: 
				{
					type: 'json',
					root: 'result',
				}
 
			},
				//autosave: false,
			autoload: true,
 
		});
		DataStore.load(
		{
			callback: function (records, operation, success)
			{
				for (var i =0;i<records.length;i++)
				{
					if (records[i].data.Adresse1 != '' || records[i].data.Adresse2 != '' || records[i].data.Adresse3 != '' || records[i].data.Codepostal != '' || records[i].data.Ville != '')
					{
						var adresse = records[i].data.Adresse1 +' '+ records[i].data.Adresse2 +' '+records[i].data.Adresse3 + ' ' + records[i].data.Codepostal + ' ' + records[i].data.Ville;
						view.codeAddress(map,adresse,records[i].data.libelle)
					}
				}
				this.tabMarkers = new Array();
 
			},
			scope: this
		});
 
	},
ma fonction récupère les éléments dans la base de données et appel ensuite la fonction permettant de geocoder :

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
codeAddress :function (map,address,libelle) 
	{		
 
		var view = this;
 
		var geocoder = new google.maps.Geocoder();
 
		geocoder.geocode( { 'address': address}, function( data, status) {
 
			switch(status)
			{
				case google.maps.GeocoderStatus.OK:
				{
					var pos = data[0].geometry.location;
 
					for(var i=0;i<view.tabMarkers.length;i++)
					{
						if(view.tabMarkers[i].position.Ya.toFixed(3) == pos.Ya.toFixed(3) && view.tabMarkers[i].position.Za.toFixed(3) == pos.Za.toFixed(3) && view.tabMarkers[i].title != "origine")
						{
							return true;
						}
					}			
 
					var distanceKm = google.maps.geometry.spherical.computeDistanceBetween(view.origine.position, pos);
					distanceKm = distanceKm/1000;
 
 
					if(distanceKm < view.proximite)
						var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/green.png");
					else
						var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/red.png");
 
 
					var infowindow = new google.maps.InfoWindow(
					{
						content: libelle + " : " + distanceKm.toFixed(2)+ ' km'
					});
 
					var marker = new google.maps.Marker(
					{
						map : map,
						position : pos,
						icon: icon,
						title: libelle
					});
 
					view.tabMarkers.push(marker);						
 
					google.maps.event.addListener(marker, 'click', function() 
					{
						if(view.direction != null)
							view.direction.setMap(null);	
 
						infowindow.open(map, marker);		
						view.itineraire(marker);
					});
					break;
				}
 
				case google.maps.GeocoderStatus.ZERO_RESULTS:
				{
					Ext.Msg.alert("Erreur adresse", "Aucune adresse n'a ete trouvée pour : "+libelle);
					break;
				}
 
				case google.maps.GeocoderStatus.OVER_QUERY_LIMIT:
				{
					Ext.Msg.alert("Erreur requete limitee", "Trop de requete ont ete envoyees");
					break;
				}
 
				case google.maps.GeocoderStatus.REQUEST_DENIED:
				{
					Ext.Msg.alert("Erreur requete annulee", "votre requete a ete annulee");
					break;
				}
 
				case google.maps.GeocoderStatus.INVALID_REQUEST:
				{
					Ext.Msg.alert("Erreur requete invalide", "votre requete pour " + libelle + " n'est pas valide");
					break;
				}
 
				default:
				{
					Ext.Msg.alert("Erreur !","Une erreur inconnue est survenue");	
					break;
				}
			}		
	  });
 
 
	},
Il me semle avoir vus qu'il fallait synchroniser ses requêtes géocode pour ne les envoyer qu'une par une, mais je ne voit pas comment faire.

ps: ce code n'est pas du tout optimiser, ce n'est qu'un "premier jet".

merci d'avance